lib.d.ts.text
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/// <reference no-default-lib="true"/>
/////////////////////////////
/// ECMAScript APIs
/////////////////////////////
declare var NaN: number;
declare var Infinity: number;
/**
* Evaluates JavaScript code and executes it.
* @param x A String value that contains valid JavaScript code.
*/
declare function eval(x: string): any;
/**
* Converts A string to an integer.
* @param s A string to convert into a number.
* @param radix A value between 2 and 36 that specifies the base of the number in numString.
* If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.
* All other strings are considered decimal.
*/
declare function parseInt(s: string, radix?: number): number;
/**
* Converts a string to a floating-point number.
* @param string A string that contains a floating-point number.
*/
declare function parseFloat(string: string): number;
/**
* Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number).
* @param number A numeric value.
*/
declare function isNaN(number: number): boolean;
/**
* Determines whether a supplied number is finite.
* @param number Any numeric value.
*/
declare function isFinite(number: number): boolean;
/**
* Gets the unencoded version of an encoded Uniform Resource Identifier (URI).
* @param encodedURI A value representing an encoded URI.
*/
declare function decodeURI(encodedURI: string): string;
/**
* Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).
* @param encodedURIComponent A value representing an encoded URI component.
*/
declare function decodeURIComponent(encodedURIComponent: string): string;
/**
* Encodes a text string as a valid Uniform Resource Identifier (URI)
* @param uri A value representing an encoded URI.
*/
declare function encodeURI(uri: string): string;
/**
* Encodes a text string as a valid component of a Uniform Resource Identifier (URI).
* @param uriComponent A value representing an encoded URI component.
*/
declare function encodeURIComponent(uriComponent: string): string;
interface PropertyDescriptor {
configurable?: boolean;
enumerable?: boolean;
value?: any;
writable?: boolean;
get? (): any;
set? (v: any): void;
}
interface PropertyDescriptorMap {
[s: string]: PropertyDescriptor;
}
interface Object {
/** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */
constructor: Function;
/** Returns a string representation of an object. */
toString(): string;
/** Returns a date converted to a string using the current locale. */
toLocaleString(): string;
/** Returns the primitive value of the specified object. */
valueOf(): Object;
/**
* Determines whether an object has a property with the specified name.
* @param v A property name.
*/
hasOwnProperty(v: string): boolean;
/**
* Determines whether an object exists in another object's prototype chain.
* @param v Another object whose prototype chain is to be checked.
*/
isPrototypeOf(v: Object): boolean;
/**
* Determines whether a specified property is enumerable.
* @param v A property name.
*/
propertyIsEnumerable(v: string): boolean;
}
/**
* Provides functionality common to all JavaScript objects.
*/
declare var Object: {
new (value?: any): Object;
(): any;
(value: any): any;
/** A reference to the prototype for a class of objects. */
prototype: Object;
/**
* Returns the prototype of an object.
* @param o The object that references the prototype.
*/
getPrototypeOf(o: any): any;
/**
* Gets the own property descriptor of the specified object.
* An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype.
* @param o Object that contains the property.
* @param p Name of the property.
*/
getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor;
/**
* Returns the names of the own properties of an object. The own properties of an object are those that are defined directly
* on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.
* @param o Object that contains the own properties.
*/
getOwnPropertyNames(o: any): string[];
/**
* Creates an object that has the specified prototype, and that optionally contains specified properties.
* @param o Object to use as a prototype. May be null
* @param properties JavaScript object that contains one or more property descriptors.
*/
create(o: any, properties?: PropertyDescriptorMap): any;
/**
* Adds a property to an object, or modifies attributes of an existing property.
* @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.
* @param p The property name.
* @param attributes Descriptor for the property. It can be for a data property or an accessor property.
*/
defineProperty(o: any, p: string, attributes: PropertyDescriptor): any;
/**
* Adds one or more properties to an object, and/or modifies attributes of existing properties.
* @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.
* @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.
*/
defineProperties(o: any, properties: PropertyDescriptorMap): any;
/**
* Prevents the modification of attributes of existing properties, and prevents the addition of new properties.
* @param o Object on which to lock the attributes.
*/
seal(o: any): any;
/**
* Prevents the modification of existing property attributes and values, and prevents the addition of new properties.
* @param o Object on which to lock the attributes.
*/
freeze(o: any): any;
/**
* Prevents the addition of new properties to an object.
* @param o Object to make non-extensible.
*/
preventExtensions(o: any): any;
/**
* Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.
* @param o Object to test.
*/
isSealed(o: any): boolean;
/**
* Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.
* @param o Object to test.
*/
isFrozen(o: any): boolean;
/**
* Returns a value that indicates whether new properties can be added to an object.
* @param o Object to test.
*/
isExtensible(o: any): boolean;
/**
* Returns the names of the enumerable properties and methods of an object.
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.
*/
keys(o: any): string[];
}
/**
* Creates a new function.
*/
interface Function {
/**
* Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.
* @param thisArg The object to be used as the this object.
* @param argArray A set of arguments to be passed to the function.
*/
apply(thisArg: any, argArray?: any): any;
/**
* Calls a method of an object, substituting another object for the current object.
* @param thisArg The object to be used as the current object.
* @param argArray A list of arguments to be passed to the method.
*/
call(thisArg: any, ...argArray: any[]): any;
/**
* For a given function, creates a bound function that has the same body as the original function.
* The this object of the bound function is associated with the specified object, and has the specified initial parameters.
* @param thisArg An object to which the this keyword can refer inside the new function.
* @param argArray A list of arguments to be passed to the new function.
*/
bind(thisArg: any, ...argArray: any[]): any;
prototype: any;
length: number;
// Non-standard extensions
arguments: any;
caller: Function;
}
declare var Function: {
/**
* Creates a new function.
* @param args A list of arguments the function accepts.
*/
new (...args: string[]): Function;
(...args: string[]): Function;
prototype: Function;
}
interface IArguments {
[index: number]: any;
length: number;
callee: Function;
}
interface String {
/** Returns a string representation of a string. */
toString(): string;
/**
* Returns the character at the specified index.
* @param pos The zero-based index of the desired character.
*/
charAt(pos: number): string;
/**
* Returns the Unicode value of the character at the specified location.
* @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.
*/
charCodeAt(index: number): number;
/**
* Returns a string that contains the concatenation of two or more strings.
* @param strings The strings to append to the end of the string.
*/
concat(...strings: string[]): string;
/**
* Returns the position of the first occurrence of a substring.
* @param searchString The substring to search for in the string
* @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.
*/
indexOf(searchString: string, position?: number): number;
/**
* Returns the last occurrence of a substring in the string.
* @param searchString The substring to search for.
* @param position The index at which to begin searching. If omitted, the search begins at the end of the string.
*/
lastIndexOf(searchString: string, position?: number): number;
/**
* Determines whether two strings are equivalent in the current locale.
* @param that String to compare to target string
*/
localeCompare(that: string): number;
/**
* Matches a string with a regular expression, and returns an array containing the results of that search.
* @param regexp A variable name or string literal containing the regular expression pattern and flags.
*/
match(regexp: string): RegExpMatchArray;
/**
* Matches a string with a regular expression, and returns an array containing the results of that search.
* @param regexp A regular expression object that contains the regular expression pattern and applicable flags.
*/
match(regexp: RegExp): RegExpMatchArray;
/**
* Replaces text in a string, using a regular expression or search string.
* @param searchValue A String object or string literal that represents the regular expression
* @param replaceValue A String object or string literal containing the text to replace for every successful match of rgExp in stringObj.
*/
replace(searchValue: string, replaceValue: string): string;
/**
* Replaces text in a string, using a regular expression or search string.
* @param searchValue A String object or string literal that represents the regular expression
* @param replaceValue A function that returns the replacement text.
*/
replace(searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string;
/**
* Replaces text in a string, using a regular expression or search string.
* @param searchValue A Regular Expression object containing the regular expression pattern and applicable flags
* @param replaceValue A String object or string literal containing the text to replace for every successful match of rgExp in stringObj.
*/
replace(searchValue: RegExp, replaceValue: string): string;
/**
* Replaces text in a string, using a regular expression or search string.
* @param searchValue A Regular Expression object containing the regular expression pattern and applicable flags
* @param replaceValue A function that returns the replacement text.
*/
replace(searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string;
/**
* Finds the first substring match in a regular expression search.
* @param regexp The regular expression pattern and applicable flags.
*/
search(regexp: string): number;
/**
* Finds the first substring match in a regular expression search.
* @param regexp The regular expression pattern and applicable flags.
*/
search(regexp: RegExp): number;
/**
* Returns a section of a string.
* @param start The index to the beginning of the specified portion of stringObj.
* @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end.
* If this value is not specified, the substring continues to the end of stringObj.
*/
slice(start?: number, end?: number): string;
/**
* Split a string into substrings using the specified separator and return them as an array.
* @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.
* @param limit A value used to limit the number of elements returned in the array.
*/
split(separator: string, limit?: number): string[];
/**
* Split a string into substrings using the specified separator and return them as an array.
* @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.
* @param limit A value used to limit the number of elements returned in the array.
*/
split(separator: RegExp, limit?: number): string[];
/**
* Returns the substring at the specified location within a String object.
* @param start The zero-based index number indicating the beginning of the substring.
* @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.
* If end is omitted, the characters from start through the end of the original string are returned.
*/
substring(start: number, end?: number): string;
/** Converts all the alphabetic characters in a string to lowercase. */
toLowerCase(): string;
/** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */
toLocaleLowerCase(): string;
/** Converts all the alphabetic characters in a string to uppercase. */
toUpperCase(): string;
/** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */
toLocaleUpperCase(): string;
/** Removes the leading and trailing white space and line terminator characters from a string. */
trim(): string;
/** Returns the length of a String object. */
length: number;
// IE extensions
/**
* Gets a substring beginning at the specified location and having the specified length.
* @param from The starting position of the desired substring. The index of the first character in the string is zero.
* @param length The number of characters to include in the returned substring.
*/
substr(from: number, length?: number): string;
[index: number]: string;
}
/**
* Allows manipulation and formatting of text strings and determination and location of substrings within strings.
*/
declare var String: {
new (value?: any): String;
(value?: any): string;
prototype: String;
fromCharCode(...codes: number[]): string;
}
interface Boolean {
}
declare var Boolean: {
new (value?: any): Boolean;
(value?: any): boolean;
prototype: Boolean;
}
interface Number {
/**
* Returns a string representation of an object.
* @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.
*/
toString(radix?: number): string;
/**
* Returns a string representing a number in fixed-point notation.
* @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.
*/
toFixed(fractionDigits?: number): string;
/**
* Returns a string containing a number represented in exponential notation.
* @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.
*/
toExponential(fractionDigits?: number): string;
/**
* Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.
* @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.
*/
toPrecision(precision?: number): string;
}
/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */
declare var Number: {
new (value?: any): Number;
(value?: any): number;
prototype: Number;
/** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */
MAX_VALUE: number;
/** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */
MIN_VALUE: number;
/**
* A value that is not a number.
* In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.
*/
NaN: number;
/**
* A value that is less than the largest negative number that can be represented in JavaScript.
* JavaScript displays NEGATIVE_INFINITY values as -infinity.
*/
NEGATIVE_INFINITY: number;
/**
* A value greater than the largest number that can be represented in JavaScript.
* JavaScript displays POSITIVE_INFINITY values as infinity.
*/
POSITIVE_INFINITY: number;
}
interface TemplateStringsArray extends Array<string> {
raw: string[];
}
interface Math {
/** The mathematical constant e. This is Euler's number, the base of natural logarithms. */
E: number;
/** The natural logarithm of 10. */
LN10: number;
/** The natural logarithm of 2. */
LN2: number;
/** The base-2 logarithm of e. */
LOG2E: number;
/** The base-10 logarithm of e. */
LOG10E: number;
/** Pi. This is the ratio of the circumference of a circle to its diameter. */
PI: number;
/** The square root of 0.5, or, equivalently, one divided by the square root of 2. */
SQRT1_2: number;
/** The square root of 2. */
SQRT2: number;
/**
* Returns the absolute value of a number (the value without regard to whether it is positive or negative).
* For example, the absolute value of -5 is the same as the absolute value of 5.
* @param x A numeric expression for which the absolute value is needed.
*/
abs(x: number): number;
/**
* Returns the arc cosine (or inverse cosine) of a number.
* @param x A numeric expression.
*/
acos(x: number): number;
/**
* Returns the arcsine of a number.
* @param x A numeric expression.
*/
asin(x: number): number;
/**
* Returns the arctangent of a number.
* @param x A numeric expression for which the arctangent is needed.
*/
atan(x: number): number;
/**
* Returns the angle (in radians) from the X axis to a point (y,x).
* @param y A numeric expression representing the cartesian y-coordinate.
* @param x A numeric expression representing the cartesian x-coordinate.
*/
atan2(y: number, x: number): number;
/**
* Returns the smallest number greater than or equal to its numeric argument.
* @param x A numeric expression.
*/
ceil(x: number): number;
/**
* Returns the cosine of a number.
* @param x A numeric expression that contains an angle measured in radians.
*/
cos(x: number): number;
/**
* Returns e (the base of natural logarithms) raised to a power.
* @param x A numeric expression representing the power of e.
*/
exp(x: number): number;
/**
* Returns the greatest number less than or equal to its numeric argument.
* @param x A numeric expression.
*/
floor(x: number): number;
/**
* Returns the natural logarithm (base e) of a number.
* @param x A numeric expression.
*/
log(x: number): number;
/**
* Returns the larger of a set of supplied numeric expressions.
* @param values Numeric expressions to be evaluated.
*/
max(...values: number[]): number;
/**
* Returns the smaller of a set of supplied numeric expressions.
* @param values Numeric expressions to be evaluated.
*/
min(...values: number[]): number;
/**
* Returns the value of a base expression taken to a specified power.
* @param x The base value of the expression.
* @param y The exponent value of the expression.
*/
pow(x: number, y: number): number;
/** Returns a pseudorandom number between 0 and 1. */
random(): number;
/**
* Returns a supplied numeric expression rounded to the nearest number.
* @param x The value to be rounded to the nearest number.
*/
round(x: number): number;
/**
* Returns the sine of a number.
* @param x A numeric expression that contains an angle measured in radians.
*/
sin(x: number): number;
/**
* Returns the square root of a number.
* @param x A numeric expression.
*/
sqrt(x: number): number;
/**
* Returns the tangent of a number.
* @param x A numeric expression that contains an angle measured in radians.
*/
tan(x: number): number;
}
/** An intrinsic object that provides basic mathematics functionality and constants. */
declare var Math: Math;
/** Enables basic storage and retrieval of dates and times. */
interface Date {
/** Returns a string representation of a date. The format of the string depends on the locale. */
toString(): string;
/** Returns a date as a string value. */
toDateString(): string;
/** Returns a time as a string value. */
toTimeString(): string;
/** Returns a value as a string value appropriate to the host environment's current locale. */
toLocaleString(): string;
/** Returns a date as a string value appropriate to the host environment's current locale. */
toLocaleDateString(): string;
/** Returns a time as a string value appropriate to the host environment's current locale. */
toLocaleTimeString(): string;
/** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */
valueOf(): number;
/** Gets the time value in milliseconds. */
getTime(): number;
/** Gets the year, using local time. */
getFullYear(): number;
/** Gets the year using Universal Coordinated Time (UTC). */
getUTCFullYear(): number;
/** Gets the month, using local time. */
getMonth(): number;
/** Gets the month of a Date object using Universal Coordinated Time (UTC). */
getUTCMonth(): number;
/** Gets the day-of-the-month, using local time. */
getDate(): number;
/** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */
getUTCDate(): number;
/** Gets the day of the week, using local time. */
getDay(): number;
/** Gets the day of the week using Universal Coordinated Time (UTC). */
getUTCDay(): number;
/** Gets the hours in a date, using local time. */
getHours(): number;
/** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */
getUTCHours(): number;
/** Gets the minutes of a Date object, using local time. */
getMinutes(): number;
/** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */
getUTCMinutes(): number;
/** Gets the seconds of a Date object, using local time. */
getSeconds(): number;
/** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */
getUTCSeconds(): number;
/** Gets the milliseconds of a Date, using local time. */
getMilliseconds(): number;
/** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */
getUTCMilliseconds(): number;
/** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */
getTimezoneOffset(): number;
/**
* Sets the date and time value in the Date object.
* @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT.
*/
setTime(time: number): number;
/**
* Sets the milliseconds value in the Date object using local time.
* @param ms A numeric value equal to the millisecond value.
*/
setMilliseconds(ms: number): number;
/**
* Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).
* @param ms A numeric value equal to the millisecond value.
*/
setUTCMilliseconds(ms: number): number;
/**
* Sets the seconds value in the Date object using local time.
* @param sec A numeric value equal to the seconds value.
* @param ms A numeric value equal to the milliseconds value.
*/
setSeconds(sec: number, ms?: number): number;
/**
* Sets the seconds value in the Date object using Universal Coordinated Time (UTC).
* @param sec A numeric value equal to the seconds value.
* @param ms A numeric value equal to the milliseconds value.
*/
setUTCSeconds(sec: number, ms?: number): number;
/**
* Sets the minutes value in the Date object using local time.
* @param min A numeric value equal to the minutes value.
* @param sec A numeric value equal to the seconds value.
* @param ms A numeric value equal to the milliseconds value.
*/
setMinutes(min: number, sec?: number, ms?: number): number;
/**
* Sets the minutes value in the Date object using Universal Coordinated Time (UTC).
* @param min A numeric value equal to the minutes value.
* @param sec A numeric value equal to the seconds value.
* @param ms A numeric value equal to the milliseconds value.
*/
setUTCMinutes(min: number, sec?: number, ms?: number): number;
/**
* Sets the hour value in the Date object using local time.
* @param hours A numeric value equal to the hours value.
* @param min A numeric value equal to the minutes value.
* @param sec A numeric value equal to the seconds value.
* @param ms A numeric value equal to the milliseconds value.
*/
setHours(hours: number, min?: number, sec?: number, ms?: number): number;
/**
* Sets the hours value in the Date object using Universal Coordinated Time (UTC).
* @param hours A numeric value equal to the hours value.
* @param min A numeric value equal to the minutes value.
* @param sec A numeric value equal to the seconds value.
* @param ms A numeric value equal to the milliseconds value.
*/
setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;
/**
* Sets the numeric day-of-the-month value of the Date object using local time.
* @param date A numeric value equal to the day of the month.
*/
setDate(date: number): number;
/**
* Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).
* @param date A numeric value equal to the day of the month.
*/
setUTCDate(date: number): number;
/**
* Sets the month value in the Date object using local time.
* @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.
* @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.
*/
setMonth(month: number, date?: number): number;
/**
* Sets the month value in the Date object using Universal Coordinated Time (UTC).
* @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.
* @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.
*/
setUTCMonth(month: number, date?: number): number;
/**
* Sets the year of the Date object using local time.
* @param year A numeric value for the year.
* @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.
* @param date A numeric value equal for the day of the month.
*/
setFullYear(year: number, month?: number, date?: number): number;
/**
* Sets the year value in the Date object using Universal Coordinated Time (UTC).
* @param year A numeric value equal to the year.
* @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.
* @param date A numeric value equal to the day of the month.
*/
setUTCFullYear(year: number, month?: number, date?: number): number;
/** Returns a date converted to a string using Universal Coordinated Time (UTC). */
toUTCString(): string;
/** Returns a date as a string value in ISO format. */
toISOString(): string;
/** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */
toJSON(key?: any): string;
}
declare var Date: {
new (): Date;
new (value: number): Date;
new (value: string): Date;
new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;
(): string;
prototype: Date;
/**
* Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.
* @param s A date string
*/
parse(s: string): number;
/**
* Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date.
* @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.
* @param month The month as an number between 0 and 11 (January to December).
* @param date The date as an number between 1 and 31.
* @param hours Must be supplied if minutes is supplied. An number from 0 to 23 (midnight to 11pm) that specifies the hour.
* @param minutes Must be supplied if seconds is supplied. An number from 0 to 59 that specifies the minutes.
* @param seconds Must be supplied if milliseconds is supplied. An number from 0 to 59 that specifies the seconds.
* @param ms An number from 0 to 999 that specifies the milliseconds.
*/
UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number;
now(): number;
}
interface RegExpMatchArray extends Array<string> {
index?: number;
input?: string;
}
interface RegExpExecArray extends Array<string> {
index: number;
input: string;
}
interface RegExp {
/**
* Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.
* @param string The String object or string literal on which to perform the search.
*/
exec(string: string): RegExpExecArray;
/**
* Returns a Boolean value that indicates whether or not a pattern exists in a searched string.
* @param string String on which to perform the search.
*/
test(string: string): boolean;
/** Returns a copy of the text of the regular expression pattern. Read-only. The rgExp argument is a Regular expression object. It can be a variable name or a literal. */
source: string;
/** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */
global: boolean;
/** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */
ignoreCase: boolean;
/** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */
multiline: boolean;
lastIndex: number;
// Non-standard extensions
compile(): RegExp;
}
declare var RegExp: {
new (pattern: string, flags?: string): RegExp;
(pattern: string, flags?: string): RegExp;
// Non-standard extensions
$1: string;
$2: string;
$3: string;
$4: string;
$5: string;
$6: string;
$7: string;
$8: string;
$9: string;
lastMatch: string;
}
interface Error {
name: string;
message: string;
}
declare var Error: {
new (message?: string): Error;
(message?: string): Error;
prototype: Error;
}
interface EvalError extends Error {
}
declare var EvalError: {
new (message?: string): EvalError;
(message?: string): EvalError;
prototype: EvalError;
}
interface RangeError extends Error {
}
declare var RangeError: {
new (message?: string): RangeError;
(message?: string): RangeError;
prototype: RangeError;
}
interface ReferenceError extends Error {
}
declare var ReferenceError: {
new (message?: string): ReferenceError;
(message?: string): ReferenceError;
prototype: ReferenceError;
}
interface SyntaxError extends Error {
}
declare var SyntaxError: {
new (message?: string): SyntaxError;
(message?: string): SyntaxError;
prototype: SyntaxError;
}
interface TypeError extends Error {
}
declare var TypeError: {
new (message?: string): TypeError;
(message?: string): TypeError;
prototype: TypeError;
}
interface URIError extends Error {
}
declare var URIError: {
new (message?: string): URIError;
(message?: string): URIError;
prototype: URIError;
}
interface JSON {
/**
* Converts a JavaScript Object Notation (JSON) string into an object.
* @param text A valid JSON string.
* @param reviver A function that transforms the results. This function is called for each member of the object.
* If a member contains nested objects, the nested objects are transformed before the parent object is.
*/
parse(text: string, reviver?: (key: any, value: any) => any): any;
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
*/
stringify(value: any): string;
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
* @param replacer A function that transforms the results.
*/
stringify(value: any, replacer: (key: string, value: any) => any): string;
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
* @param replacer Array that transforms the results.
*/
stringify(value: any, replacer: any[]): string;
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
* @param replacer A function that transforms the results.
* @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
*/
stringify(value: any, replacer: (key: string, value: any) => any, space: any): string;
/**
* Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
* @param value A JavaScript value, usually an object or array, to be converted.
* @param replacer Array that transforms the results.
* @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
*/
stringify(value: any, replacer: any[], space: any): string;
}
/**
* An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.
*/
declare var JSON: JSON;
/////////////////////////////
/// ECMAScript Array API (specially handled by compiler)
/////////////////////////////
interface Array<T> {
/**
* Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.
*/
length: number;
/**
* Returns a string representation of an array.
*/
toString(): string;
toLocaleString(): string;
/**
* Appends new elements to an array, and returns the new length of the array.
* @param items New elements of the Array.
*/
push(...items: T[]): number;
/**
* Removes the last element from an array and returns it.
*/
pop(): T;
/**
* Combines two or more arrays.
* @param items Additional items to add to the end of array1.
*/
concat<U extends T[]>(...items: U[]): T[];
/**
* Combines two or more arrays.
* @param items Additional items to add to the end of array1.
*/
concat(...items: T[]): T[];
/**
* Adds all the elements of an array separated by the specified separator string.
* @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.
*/
join(separator?: string): string;
/**
* Reverses the elements in an Array.
*/
reverse(): T[];
/**
* Removes the first element from an array and returns it.
*/
shift(): T;
/**
* Returns a section of an array.
* @param start The beginning of the specified portion of the array.
* @param end The end of the specified portion of the array.
*/
slice(start?: number, end?: number): T[];
/**
* Sorts an array.
* @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order.
*/
sort(compareFn?: (a: T, b: T) => number): T[];
/**
* Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
* @param start The zero-based location in the array from which to start removing elements.
*/
splice(start: number): T[];
/**
* Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
* @param start The zero-based location in the array from which to start removing elements.
* @param deleteCount The number of elements to remove.
* @param items Elements to insert into the array in place of the deleted elements.
*/
splice(start: number, deleteCount: number, ...items: T[]): T[];
/**
* Inserts new elements at the start of an array.
* @param items Elements to insert at the start of the Array.
*/
unshift(...items: T[]): number;
/**
* Returns the index of the first occurrence of a value in an array.
* @param searchElement The value to locate in the array.
* @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.
*/
indexOf(searchElement: T, fromIndex?: number): number;
/**
* Returns the index of the last occurrence of a specified value in an array.
* @param searchElement The value to locate in the array.
* @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.
*/
lastIndexOf(searchElement: T, fromIndex?: number): number;
/**
* Determines whether all the members of an array satisfy the specified test.
* @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
/**
* Determines whether the specified callback function returns true for any element of an array.
* @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
/**
* Performs the specified action for each element in an array.
* @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
/**
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
/**
* Returns the elements of an array that meet the condition specified in a callback function.
* @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
*/
filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[];
/**
* Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
* @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.
* @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
*/
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
/**
* Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
* @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.
* @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
*/
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
/**
* Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
* @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.
* @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
*/
reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
/**
* Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
* @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.
* @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
*/
reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
[n: number]: T;
}
declare var Array: {
new (arrayLength?: number): any[];
new <T>(arrayLength: number): T[];
new <T>(...items: T[]): T[];
(arrayLength?: number): any[];
<T>(arrayLength: number): T[];
<T>(...items: T[]): T[];
isArray(arg: any): boolean;
prototype: Array<any>;
}
/////////////////////////////
/// IE10 ECMAScript Extensions
/////////////////////////////
/**
* Represents a raw buffer of binary data, which is used to store data for the
* different typed arrays. ArrayBuffers cannot be read from or written to directly,
* but can be passed to a typed array or DataView Object to interpret the raw
* buffer as needed.
*/
interface ArrayBuffer {
/**
* Read-only. The length of the ArrayBuffer (in bytes).
*/
byteLength: number;
/**
* Returns a section of an ArrayBuffer.
*/
slice(begin:number, end?:number): ArrayBuffer;
}
declare var ArrayBuffer: {
prototype: ArrayBuffer;
new (byteLength: number): ArrayBuffer;
}
interface ArrayBufferView {
buffer: ArrayBuffer;
byteOffset: number;
byteLength: number;
}
/**
* A typed array of 8-bit integer values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Int8Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Int8Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements at begin, inclusive, up to end, exclusive.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Int8Array;
}
declare var Int8Array: {
prototype: Int8Array;
new (length: number): Int8Array;
new (array: Int8Array): Int8Array;
new (array: number[]): Int8Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Uint8Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Uint8Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Uint8Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Uint8Array;
}
declare var Uint8Array: {
prototype: Uint8Array;
new (length: number): Uint8Array;
new (array: Uint8Array): Uint8Array;
new (array: number[]): Uint8Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 16-bit integer values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Int16Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Int16Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Int16Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Int16Array;
}
declare var Int16Array: {
prototype: Int16Array;
new (length: number): Int16Array;
new (array: Int16Array): Int16Array;
new (array: number[]): Int16Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Uint16Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Uint16Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Uint16Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Uint16Array;
}
declare var Uint16Array: {
prototype: Uint16Array;
new (length: number): Uint16Array;
new (array: Uint16Array): Uint16Array;
new (array: number[]): Uint16Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 32-bit integer values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Int32Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Int32Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Int32Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Int32Array;
}
declare var Int32Array: {
prototype: Int32Array;
new (length: number): Int32Array;
new (array: Int32Array): Int32Array;
new (array: number[]): Int32Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Uint32Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Uint32Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Int8Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Uint32Array;
}
declare var Uint32Array: {
prototype: Uint32Array;
new (length: number): Uint32Array;
new (array: Uint32Array): Uint32Array;
new (array: number[]): Uint32Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 32-bit float values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Float32Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Float32Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Float32Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Float32Array;
}
declare var Float32Array: {
prototype: Float32Array;
new (length: number): Float32Array;
new (array: Float32Array): Float32Array;
new (array: number[]): Float32Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array;
BYTES_PER_ELEMENT: number;
}
/**
* A typed array of 64-bit float values. The contents are initialized to 0. If the requested number of bytes could not be allocated an exception is raised.
*/
interface Float64Array extends ArrayBufferView {
/**
* The size in bytes of each element in the array.
*/
BYTES_PER_ELEMENT: number;
/**
* The length of the array.
*/
length: number;
[index: number]: number;
/**
* Gets the element at the specified index.
* @param index The index at which to get the element of the array.
*/
get(index: number): number;
/**
* Sets a value or an array of values.
* @param index The index of the location to set.
* @param value The value to set.
*/
set(index: number, value: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: Float64Array, offset?: number): void;
/**
* Sets a value or an array of values.
* @param array A typed or untyped array of values to set.
* @param offset The index in the current array at which the values are to be written.
*/
set(array: number[], offset?: number): void;
/**
* Gets a new Float64Array view of the ArrayBuffer Object store for this array, specifying the first and last members of the subarray.
* @param begin The index of the beginning of the array.
* @param end The index of the end of the array.
*/
subarray(begin: number, end?: number): Float64Array;
}
declare var Float64Array: {
prototype: Float64Array;
new (length: number): Float64Array;
new (array: Float64Array): Float64Array;
new (array: number[]): Float64Array;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array;
BYTES_PER_ELEMENT: number;
}
/**
* You can use a DataView object to read and write the different kinds of binary data to any location in the ArrayBuffer.
*/
interface DataView extends ArrayBufferView {
/**
* Gets the Int8 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getInt8(byteOffset: number): number;
/**
* Gets the Uint8 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getUint8(byteOffset: number): number;
/**
* Gets the Int16 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getInt16(byteOffset: number, littleEndian?: boolean): number;
/**
* Gets the Uint16 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getUint16(byteOffset: number, littleEndian?: boolean): number;
/**
* Gets the Int32 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getInt32(byteOffset: number, littleEndian?: boolean): number;
/**
* Gets the Uint32 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getUint32(byteOffset: number, littleEndian?: boolean): number;
/**
* Gets the Float32 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getFloat32(byteOffset: number, littleEndian?: boolean): number;
/**
* Gets the Float64 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.
* @param byteOffset The place in the buffer at which the value should be retrieved.
*/
getFloat64(byteOffset: number, littleEndian?: boolean): number;
/**
* Stores an Int8 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
*/
setInt8(byteOffset: number, value: number): void;
/**
* Stores an Uint8 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
*/
setUint8(byteOffset: number, value: number): void;
/**
* Stores an Int16 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
* @param littleEndian If false or undefined, a big-endian value should be written, otherwise a little-endian value should be written.
*/
setInt16(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
* Stores an Uint16 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
* @param littleEndian If false or undefined, a big-endian value should be written, otherwise a little-endian value should be written.
*/
setUint16(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
* Stores an Int32 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
* @param littleEndian If false or undefined, a big-endian value should be written, otherwise a little-endian value should be written.
*/
setInt32(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
* Stores an Uint32 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
* @param littleEndian If false or undefined, a big-endian value should be written, otherwise a little-endian value should be written.
*/
setUint32(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
* Stores an Float32 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
* @param littleEndian If false or undefined, a big-endian value should be written, otherwise a little-endian value should be written.
*/
setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
* Stores an Float64 value at the specified byte offset from the start of the view.
* @param byteOffset The place in the buffer at which the value should be set.
* @param value The value to set.
* @param littleEndian If false or undefined, a big-endian value should be written, otherwise a little-endian value should be written.
*/
setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void;
}
declare var DataView: {
prototype: DataView;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): DataView;
}
/////////////////////////////
/// IE11 ECMAScript Extensions
/////////////////////////////
interface Map<K, V> {
clear(): void;
delete(key: K): boolean;
forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void;
get(key: K): V;
has(key: K): boolean;
set(key: K, value: V): Map<K, V>;
size: number;
}
declare var Map: {
new <K, V>(): Map<K, V>;
}
interface WeakMap<K, V> {
clear(): void;
delete(key: K): boolean;
get(key: K): V;
has(key: K): boolean;
set(key: K, value: V): WeakMap<K, V>;
}
declare var WeakMap: {
new <K, V>(): WeakMap<K, V>;
}
interface Set<T> {
add(value: T): Set<T>;
clear(): void;
delete(value: T): boolean;
forEach(callbackfn: (value: T, index: T, set: Set<T>) => void, thisArg?: any): void;
has(value: T): boolean;
size: number;
}
declare var Set: {
new <T>(): Set<T>;
}
declare module Intl {
interface CollatorOptions {
usage?: string;
localeMatcher?: string;
numeric?: boolean;
caseFirst?: string;
sensitivity?: string;
ignorePunctuation?: boolean;
}
interface ResolvedCollatorOptions {
locale: string;
usage: string;
sensitivity: string;
ignorePunctuation: boolean;
collation: string;
caseFirst: string;
numeric: boolean;
}
interface Collator {
compare(x: string, y: string): number;
resolvedOptions(): ResolvedCollatorOptions;
}
var Collator: {
new (locales?: string[], options?: CollatorOptions): Collator;
new (locale?: string, options?: CollatorOptions): Collator;
(locales?: string[], options?: CollatorOptions): Collator;
(locale?: string, options?: CollatorOptions): Collator;
supportedLocalesOf(locales: string[], options?: CollatorOptions): string[];
supportedLocalesOf(locale: string, options?: CollatorOptions): string[];
}
interface NumberFormatOptions {
localeMatcher?: string;
style?: string;
currency?: string;
currencyDisplay?: string;
useGrouping?: boolean;
}
interface ResolvedNumberFormatOptions {
locale: string;
numberingSystem: string;
style: string;
currency?: string;
currencyDisplay?: string;
minimumintegerDigits: number;
minimumFractionDigits: number;
maximumFractionDigits: number;
minimumSignificantDigits?: number;
maximumSignificantDigits?: number;
useGrouping: boolean;
}
interface NumberFormat {
format(value: number): string;
resolvedOptions(): ResolvedNumberFormatOptions;
}
var NumberFormat: {
new (locales?: string[], options?: NumberFormatOptions): Collator;
new (locale?: string, options?: NumberFormatOptions): Collator;
(locales?: string[], options?: NumberFormatOptions): Collator;
(locale?: string, options?: NumberFormatOptions): Collator;
supportedLocalesOf(locales: string[], options?: NumberFormatOptions): string[];
supportedLocalesOf(locale: string, options?: NumberFormatOptions): string[];
}
interface DateTimeFormatOptions {
localeMatcher?: string;
weekday?: string;
era?: string;
year?: string;
month?: string;
day?: string;
hour?: string;
minute?: string;
second?: string;
timeZoneName?: string;
formatMatcher?: string;
hour12: boolean;
}
interface ResolvedDateTimeFormatOptions {
locale: string;
calendar: string;
numberingSystem: string;
timeZone: string;
hour12?: boolean;
weekday?: string;
era?: string;
year?: string;
month?: string;
day?: string;
hour?: string;
minute?: string;
second?: string;
timeZoneName?: string;
}
interface DateTimeFormat {
format(date: number): string;
resolvedOptions(): ResolvedDateTimeFormatOptions;
}
var DateTimeFormat: {
new (locales?: string[], options?: DateTimeFormatOptions): Collator;
new (locale?: string, options?: DateTimeFormatOptions): Collator;
(locales?: string[], options?: DateTimeFormatOptions): Collator;
(locale?: string, options?: DateTimeFormatOptions): Collator;
supportedLocalesOf(locales: string[], options?: DateTimeFormatOptions): string[];
supportedLocalesOf(locale: string, options?: DateTimeFormatOptions): string[];
}
}
interface String {
/**
* Determines whether two strings are equivalent in the current locale.
* @param that String to compare to target string
* @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.
* @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.
*/
localeCompare(that: string, locales: string[], options?: Intl.CollatorOptions): number;
/**
* Determines whether two strings are equivalent in the current locale.
* @param that String to compare to target string
* @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.
* @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.
*/
localeCompare(that: string, locale: string, options?: Intl.CollatorOptions): number;
}
interface Number {
/**
* Converts a number to a string by using the current or specified locale.
* @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.
* @param options An object that contains one or more properties that specify comparison options.
*/
toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string;
/**
* Converts a number to a string by using the current or specified locale.
* @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used.
* @param options An object that contains one or more properties that specify comparison options.
*/
toLocaleString(locale?: string, options?: Intl.NumberFormatOptions): string;
}
interface Date {
/**
* Converts a date to a string by using the current or specified locale.
* @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.
* @param options An object that contains one or more properties that specify comparison options.
*/
toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string;
/**
* Converts a date to a string by using the current or specified locale.
* @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used.
* @param options An object that contains one or more properties that specify comparison options.
*/
toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string;
}
/////////////////////////////
/// IE DOM APIs
/////////////////////////////
interface PositionOptions {
enableHighAccuracy?: boolean;
timeout?: number;
maximumAge?: number;
}
interface ObjectURLOptions {
oneTimeOnly?: boolean;
}
interface StoreExceptionsInformation extends ExceptionInformation {
siteName?: string;
explanationString?: string;
detailURI?: string;
}
interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation {
arrayOfDomainStrings?: string[];
}
interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation {
arrayOfDomainStrings?: string[];
}
interface AlgorithmParameters {
}
interface MutationObserverInit {
childList?: boolean;
attributes?: boolean;
characterData?: boolean;
subtree?: boolean;
attributeOldValue?: boolean;
characterDataOldValue?: boolean;
attributeFilter?: string[];
}
interface PointerEventInit extends MouseEventInit {
pointerId?: number;
width?: number;
height?: number;
pressure?: number;
tiltX?: number;
tiltY?: number;
pointerType?: string;
isPrimary?: boolean;
}
interface ExceptionInformation {
domain?: string;
}
interface DeviceAccelerationDict {
x?: number;
y?: number;
z?: number;
}
interface MsZoomToOptions {
contentX?: number;
contentY?: number;
viewportX?: string;
viewportY?: string;
scaleFactor?: number;
animate?: string;
}
interface DeviceRotationRateDict {
alpha?: number;
beta?: number;
gamma?: number;
}
interface Algorithm {
name?: string;
params?: AlgorithmParameters;
}
interface MouseEventInit {
bubbles?: boolean;
cancelable?: boolean;
view?: Window;
detail?: number;
screenX?: number;
screenY?: number;
clientX?: number;
clientY?: number;
ctrlKey?: boolean;
shiftKey?: boolean;
altKey?: boolean;
metaKey?: boolean;
button?: number;
buttons?: number;
relatedTarget?: EventTarget;
}
interface WebGLContextAttributes {
alpha?: boolean;
depth?: boolean;
stencil?: boolean;
antialias?: boolean;
premultipliedAlpha?: boolean;
preserveDrawingBuffer?: boolean;
}
interface NodeListOf<TNode extends Node> extends NodeList {
length: number;
item(index: number): TNode;
[index: number]: TNode;
}
interface HTMLElement extends Element, ElementCSSInlineStyle, MSEventAttachmentTarget, MSNodeExtensions {
hidden: any;
readyState: any;
onmouseleave: (ev: MouseEvent) => any;
onbeforecut: (ev: DragEvent) => any;
onkeydown: (ev: KeyboardEvent) => any;
onmove: (ev: MSEventObj) => any;
onkeyup: (ev: KeyboardEvent) => any;
onreset: (ev: Event) => any;
onhelp: (ev: Event) => any;
ondragleave: (ev: DragEvent) => any;
className: string;
onfocusin: (ev: FocusEvent) => any;
onseeked: (ev: Event) => any;
recordNumber: any;
title: string;
parentTextEdit: Element;
outerHTML: string;
ondurationchange: (ev: Event) => any;
offsetHeight: number;
all: HTMLCollection;
onblur: (ev: FocusEvent) => any;
dir: string;
onemptied: (ev: Event) => any;
onseeking: (ev: Event) => any;
oncanplay: (ev: Event) => any;
ondeactivate: (ev: UIEvent) => any;
ondatasetchanged: (ev: MSEventObj) => any;
onrowsdelete: (ev: MSEventObj) => any;
sourceIndex: number;
onloadstart: (ev: Event) => any;
onlosecapture: (ev: MSEventObj) => any;
ondragenter: (ev: DragEvent) => any;
oncontrolselect: (ev: MSEventObj) => any;
onsubmit: (ev: Event) => any;
behaviorUrns: MSBehaviorUrnsCollection;
scopeName: string;
onchange: (ev: Event) => any;
id: string;
onlayoutcomplete: (ev: MSEventObj) => any;
uniqueID: string;
onbeforeactivate: (ev: UIEvent) => any;
oncanplaythrough: (ev: Event) => any;
onbeforeupdate: (ev: MSEventObj) => any;
onfilterchange: (ev: MSEventObj) => any;
offsetParent: Element;
ondatasetcomplete: (ev: MSEventObj) => any;
onsuspend: (ev: Event) => any;
onmouseenter: (ev: MouseEvent) => any;
innerText: string;
onerrorupdate: (ev: MSEventObj) => any;
onmouseout: (ev: MouseEvent) => any;
parentElement: HTMLElement;
onmousewheel: (ev: MouseWheelEvent) => any;
onvolumechange: (ev: Event) => any;
oncellchange: (ev: MSEventObj) => any;
onrowexit: (ev: MSEventObj) => any;
onrowsinserted: (ev: MSEventObj) => any;
onpropertychange: (ev: MSEventObj) => any;
filters: any;
children: HTMLCollection;
ondragend: (ev: DragEvent) => any;
onbeforepaste: (ev: DragEvent) => any;
ondragover: (ev: DragEvent) => any;
offsetTop: number;
onmouseup: (ev: MouseEvent) => any;
ondragstart: (ev: DragEvent) => any;
onbeforecopy: (ev: DragEvent) => any;
ondrag: (ev: DragEvent) => any;
innerHTML: string;
onmouseover: (ev: MouseEvent) => any;
lang: string;
uniqueNumber: number;
onpause: (ev: Event) => any;
tagUrn: string;
onmousedown: (ev: MouseEvent) => any;
onclick: (ev: MouseEvent) => any;
onwaiting: (ev: Event) => any;
onresizestart: (ev: MSEventObj) => any;
offsetLeft: number;
isTextEdit: boolean;
isDisabled: boolean;
onpaste: (ev: DragEvent) => any;
canHaveHTML: boolean;
onmoveend: (ev: MSEventObj) => any;
language: string;
onstalled: (ev: Event) => any;
onmousemove: (ev: MouseEvent) => any;
style: MSStyleCSSProperties;
isContentEditable: boolean;
onbeforeeditfocus: (ev: MSEventObj) => any;
onratechange: (ev: Event) => any;
contentEditable: string;
tabIndex: number;
document: Document;
onprogress: (ev: ProgressEvent) => any;
ondblclick: (ev: MouseEvent) => any;
oncontextmenu: (ev: MouseEvent) => any;
onloadedmetadata: (ev: Event) => any;
onafterupdate: (ev: MSEventObj) => any;
onerror: (ev: ErrorEvent) => any;
onplay: (ev: Event) => any;
onresizeend: (ev: MSEventObj) => any;
onplaying: (ev: Event) => any;
isMultiLine: boolean;
onfocusout: (ev: FocusEvent) => any;
onabort: (ev: UIEvent) => any;
ondataavailable: (ev: MSEventObj) => any;
hideFocus: boolean;
onreadystatechange: (ev: Event) => any;
onkeypress: (ev: KeyboardEvent) => any;
onloadeddata: (ev: Event) => any;
onbeforedeactivate: (ev: UIEvent) => any;
outerText: string;
disabled: boolean;
onactivate: (ev: UIEvent) => any;
accessKey: string;
onmovestart: (ev: MSEventObj) => any;
onselectstart: (ev: Event) => any;
onfocus: (ev: FocusEvent) => any;
ontimeupdate: (ev: Event) => any;
onresize: (ev: UIEvent) => any;
oncut: (ev: DragEvent) => any;
onselect: (ev: UIEvent) => any;
ondrop: (ev: DragEvent) => any;
offsetWidth: number;
oncopy: (ev: DragEvent) => any;
onended: (ev: Event) => any;
onscroll: (ev: UIEvent) => any;
onrowenter: (ev: MSEventObj) => any;
onload: (ev: Event) => any;
canHaveChildren: boolean;
oninput: (ev: Event) => any;
onmscontentzoom: (ev: MSEventObj) => any;
oncuechange: (ev: Event) => any;
spellcheck: boolean;
classList: DOMTokenList;
onmsmanipulationstatechanged: (ev: any) => any;
draggable: boolean;
dataset: DOMStringMap;
dragDrop(): boolean;
scrollIntoView(top?: boolean): void;
addFilter(filter: any): void;
setCapture(containerCapture?: boolean): void;
focus(): void;
getAdjacentText(where: string): string;
insertAdjacentText(where: string, text: string): void;
getElementsByClassName(classNames: string): NodeList;
setActive(): void;
removeFilter(filter: any): void;
blur(): void;
clearAttributes(): void;
releaseCapture(): void;
createControlRange(): ControlRangeCollection;
removeBehavior(cookie: number): boolean;
contains(child: HTMLElement): boolean;
click(): void;
insertAdjacentElement(position: string, insertedElement: Element): Element;
mergeAttributes(source: HTMLElement, preserveIdentity?: boolean): void;
replaceAdjacentText(where: string, newText: string): string;
applyElement(apply: Element, where?: string): Element;
addBehavior(bstrUrl: string, factory?: any): number;
insertAdjacentHTML(where: string, html: string): void;
msGetInputContext(): MSInputMethodContext;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLElement: {
prototype: HTMLElement;
new(): HTMLElement;
}
interface Document extends Node, NodeSelector, MSEventAttachmentTarget, DocumentEvent, MSResourceMetadata, MSNodeExtensions, MSDocumentExtensions, GlobalEventHandlers {
/**
* Gets a reference to the root node of the document.
*/
documentElement: HTMLElement;
/**
* Retrieves the collection of user agents and versions declared in the X-UA-Compatible
*/
compatible: MSCompatibleInfoCollection;
/**
* Fires when the user presses a key.
* @param ev The keyboard event
*/
onkeydown: (ev: KeyboardEvent) => any;
/**
* Fires when the user releases a key.
* @param ev The keyboard event
*/
onkeyup: (ev: KeyboardEvent) => any;
/**
* Gets the implementation object of the current document.
*/
implementation: DOMImplementation;
/**
* Fires when the user resets a form.
* @param ev The event.
*/
onreset: (ev: Event) => any;
/**
* Retrieves a collection of all script objects in the document.
*/
scripts: HTMLCollection;
/**
* Fires when the user presses the F1 key while the browser is the active window.
* @param ev The event.
*/
onhelp: (ev: Event) => any;
/**
* Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.
* @param ev The drag event.
*/
ondragleave: (ev: DragEvent) => any;
/**
* Gets or sets the character set used to encode the object.
*/
charset: string;
/**
* Fires for an element just prior to setting focus on that element.
* @param ev The focus event
*/
onfocusin: (ev: FocusEvent) => any;
/**
* Sets or gets the color of the links that the user has visited.
*/
vlinkColor: string;
/**
* Occurs when the seek operation ends.
* @param ev The event.
*/
onseeked: (ev: Event) => any;
security: string;
/**
* Contains the title of the document.
*/
title: string;
/**
* Retrieves a collection of namespace objects.
*/
namespaces: MSNamespaceInfoCollection;
/**
* Gets the default character set from the current regional language settings.
*/
defaultCharset: string;
/**
* Retrieves a collection of all embed objects in the document.
*/
embeds: HTMLCollection;
/**
* Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.
*/
styleSheets: StyleSheetList;
/**
* Retrieves a collection of all window objects defined by the given document or defined by the document associated with the given window.
*/
frames: Window;
/**
* Occurs when the duration attribute is updated.
* @param ev The event.
*/
ondurationchange: (ev: Event) => any;
/**
* Returns a reference to the collection of elements contained by the object.
*/
all: HTMLCollection;
/**
* Retrieves a collection, in source order, of all form objects in the document.
*/
forms: HTMLCollection;
/**
* Fires when the object loses the input focus.
* @param ev The focus event.
*/
onblur: (ev: FocusEvent) => any;
/**
* Sets or retrieves a value that indicates the reading order of the object.
*/
dir: string;
/**
* Occurs when the media element is reset to its initial state.
* @param ev The event.
*/
onemptied: (ev: Event) => any;
/**
* Sets or gets a value that indicates whether the document can be edited.
*/
designMode: string;
/**
* Occurs when the current playback position is moved.
* @param ev The event.
*/
onseeking: (ev: Event) => any;
/**
* Fires when the activeElement is changed from the current object to another object in the parent document.
* @param ev The UI Event
*/
ondeactivate: (ev: UIEvent) => any;
/**
* Occurs when playback is possible, but would require further buffering.
* @param ev The event.
*/
oncanplay: (ev: Event) => any;
/**
* Fires when the data set exposed by a data source object changes.
* @param ev The event.
*/
ondatasetchanged: (ev: MSEventObj) => any;
/**
* Fires when rows are about to be deleted from the recordset.
* @param ev The event
*/
onrowsdelete: (ev: MSEventObj) => any;
Script: MSScriptHost;
/**
* Occurs when Internet Explorer begins looking for media data.
* @param ev The event.
*/
onloadstart: (ev: Event) => any;
/**
* Gets the URL for the document, stripped of any character encoding.
*/
URLUnencoded: string;
defaultView: Window;
/**
* Fires when the user is about to make a control selection of the object.
* @param ev The event.
*/
oncontrolselect: (ev: MSEventObj) => any;
/**
* Fires on the target element when the user drags the object to a valid drop target.
* @param ev The drag event.
*/
ondragenter: (ev: DragEvent) => any;
onsubmit: (ev: Event) => any;
/**
* Returns the character encoding used to create the webpage that is loaded into the document object.
*/
inputEncoding: string;
/**
* Gets the object that has the focus when the parent document has focus.
*/
activeElement: Element;
/**
* Fires when the contents of the object or selection have changed.
* @param ev The event.
*/
onchange: (ev: Event) => any;
/**
* Retrieves a collection of all a objects that specify the href property and all area objects in the document.
*/
links: HTMLCollection;
/**
* Retrieves an autogenerated, unique identifier for the object.
*/
uniqueID: string;
/**
* Sets or gets the URL for the current document.
*/
URL: string;
/**
* Fires immediately before the object is set as the active element.
* @param ev The event.
*/
onbeforeactivate: (ev: UIEvent) => any;
head: HTMLHeadElement;
cookie: string;
xmlEncoding: string;
oncanplaythrough: (ev: Event) => any;
/**
* Retrieves the document compatibility mode of the document.
*/
documentMode: number;
characterSet: string;
/**
* Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.
*/
anchors: HTMLCollection;
onbeforeupdate: (ev: MSEventObj) => any;
/**
* Fires to indicate that all data is available from the data source object.
* @param ev The event.
*/
ondatasetcomplete: (ev: MSEventObj) => any;
plugins: HTMLCollection;
/**
* Occurs if the load operation has been intentionally halted.
* @param ev The event.
*/
onsuspend: (ev: Event) => any;
/**
* Gets the root svg element in the document hierarchy.
*/
rootElement: SVGSVGElement;
/**
* Retrieves a value that indicates the current state of the object.
*/
readyState: string;
/**
* Gets the URL of the location that referred the user to the current page.
*/
referrer: string;
/**
* Sets or gets the color of all active links in the document.
*/
alinkColor: string;
/**
* Fires on a databound object when an error occurs while updating the associated data in the data source object.
* @param ev The event.
*/
onerrorupdate: (ev: MSEventObj) => any;
/**
* Gets a reference to the container object of the window.
*/
parentWindow: Window;
/**
* Fires when the user moves the mouse pointer outside the boundaries of the object.
* @param ev The mouse event.
*/
onmouseout: (ev: MouseEvent) => any;
/**
* Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode.
* @param ev The event.
*/
onmsthumbnailclick: (ev: MSSiteModeEvent) => any;
/**
* Fires when the wheel button is rotated.
* @param ev The mouse event
*/
onmousewheel: (ev: MouseWheelEvent) => any;
/**
* Occurs when the volume is changed, or playback is muted or unmuted.
* @param ev The event.
*/
onvolumechange: (ev: Event) => any;
/**
* Fires when data changes in the data provider.
* @param ev The event.
*/
oncellchange: (ev: MSEventObj) => any;
/**
* Fires just before the data source control changes the current row in the object.
* @param ev The event.
*/
onrowexit: (ev: MSEventObj) => any;
/**
* Fires just after new rows are inserted in the current recordset.
* @param ev The event.
*/
onrowsinserted: (ev: MSEventObj) => any;
/**
* Gets or sets the version attribute specified in the declaration of an XML document.
*/
xmlVersion: string;
msCapsLockWarningOff: boolean;
/**
* Fires when a property changes on the object.
* @param ev The event.
*/
onpropertychange: (ev: MSEventObj) => any;
/**
* Fires on the source object when the user releases the mouse at the close of a drag operation.
* @param ev The event.
*/
ondragend: (ev: DragEvent) => any;
/**
* Gets an object representing the document type declaration associated with the current document.
*/
doctype: DocumentType;
/**
* Fires on the target element continuously while the user drags the object over a valid drop target.
* @param ev The event.
*/
ondragover: (ev: DragEvent) => any;
/**
* Deprecated. Sets or retrieves a value that indicates the background color behind the object.
*/
bgColor: string;
/**
* Fires on the source object when the user starts to drag a text selection or selected object.
* @param ev The event.
*/
ondragstart: (ev: DragEvent) => any;
/**
* Fires when the user releases a mouse button while the mouse is over the object.
* @param ev The mouse event.
*/
onmouseup: (ev: MouseEvent) => any;
/**
* Fires on the source object continuously during a drag operation.
* @param ev The event.
*/
ondrag: (ev: DragEvent) => any;
/**
* Fires when the user moves the mouse pointer into the object.
* @param ev The mouse event.
*/
onmouseover: (ev: MouseEvent) => any;
/**
* Sets or gets the color of the document links.
*/
linkColor: string;
/**
* Occurs when playback is paused.
* @param ev The event.
*/
onpause: (ev: Event) => any;
/**
* Fires when the user clicks the object with either mouse button.
* @param ev The mouse event.
*/
onmousedown: (ev: MouseEvent) => any;
/**
* Fires when the user clicks the left mouse button on the object
* @param ev The mouse event.
*/
onclick: (ev: MouseEvent) => any;
/**
* Occurs when playback stops because the next frame of a video resource is not available.
* @param ev The event.
*/
onwaiting: (ev: Event) => any;
/**
* Fires when the user clicks the Stop button or leaves the Web page.
* @param ev The event.
*/
onstop: (ev: Event) => any;
/**
* Occurs when an item is removed from a Jump List of a webpage running in Site Mode.
* @param ev The event.
*/
onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any;
/**
* Retrieves a collection of all applet objects in the document.
*/
applets: HTMLCollection;
/**
* Specifies the beginning and end of the document body.
*/
body: HTMLElement;
/**
* Sets or gets the security domain of the document.
*/
domain: string;
xmlStandalone: boolean;
/**
* Represents the active selection, which is a highlighted block of text or other elements in the document that a user or a script can carry out some action on.
*/
selection: MSSelection;
/**
* Occurs when the download has stopped.
* @param ev The event.
*/
onstalled: (ev: Event) => any;
/**
* Fires when the user moves the mouse over the object.
* @param ev The mouse event.
*/
onmousemove: (ev: MouseEvent) => any;
/**
* Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected.
* @param ev The event.
*/
onbeforeeditfocus: (ev: MSEventObj) => any;
/**
* Occurs when the playback rate is increased or decreased.
* @param ev The event.
*/
onratechange: (ev: Event) => any;
/**
* Occurs to indicate progress while downloading media data.
* @param ev The event.
*/
onprogress: (ev: ProgressEvent) => any;
/**
* Fires when the user double-clicks the object.
* @param ev The mouse event.
*/
ondblclick: (ev: MouseEvent) => any;
/**
* Fires when the user clicks the right mouse button in the client area, opening the context menu.
* @param ev The mouse event.
*/
oncontextmenu: (ev: MouseEvent) => any;
/**
* Occurs when the duration and dimensions of the media have been determined.
* @param ev The event.
*/
onloadedmetadata: (ev: Event) => any;
media: string;
/**
* Fires when an error occurs during object loading.
* @param ev The event.
*/
onerror: (ev: ErrorEvent) => any;
/**
* Occurs when the play method is requested.
* @param ev The event.
*/
onplay: (ev: Event) => any;
onafterupdate: (ev: MSEventObj) => any;
/**
* Occurs when the audio or video has started playing.
* @param ev The event.
*/
onplaying: (ev: Event) => any;
/**
* Retrieves a collection, in source order, of img objects in the document.
*/
images: HTMLCollection;
/**
* Contains information about the current URL.
*/
location: Location;
/**
* Fires when the user aborts the download.
* @param ev The event.
*/
onabort: (ev: UIEvent) => any;
/**
* Fires for the current element with focus immediately after moving focus to another element.
* @param ev The event.
*/
onfocusout: (ev: FocusEvent) => any;
/**
* Fires when the selection state of a document changes.
* @param ev The event.
*/
onselectionchange: (ev: Event) => any;
/**
* Fires when a local DOM Storage area is written to disk.
* @param ev The event.
*/
onstoragecommit: (ev: StorageEvent) => any;
/**
* Fires periodically as data arrives from data source objects that asynchronously transmit their data.
* @param ev The event.
*/
ondataavailable: (ev: MSEventObj) => any;
/**
* Fires when the state of the object has changed.
* @param ev The event
*/
onreadystatechange: (ev: Event) => any;
/**
* Gets the date that the page was last modified, if the page supplies one.
*/
lastModified: string;
/**
* Fires when the user presses an alphanumeric key.
* @param ev The event.
*/
onkeypress: (ev: KeyboardEvent) => any;
/**
* Occurs when media data is loaded at the current playback position.
* @param ev The event.
*/
onloadeddata: (ev: Event) => any;
/**
* Fires immediately before the activeElement is changed from the current object to another object in the parent document.
* @param ev The event.
*/
onbeforedeactivate: (ev: UIEvent) => any;
/**
* Fires when the object is set as the active element.
* @param ev The event.
*/
onactivate: (ev: UIEvent) => any;
onselectstart: (ev: Event) => any;
/**
* Fires when the object receives focus.
* @param ev The event.
*/
onfocus: (ev: FocusEvent) => any;
/**
* Sets or gets the foreground (text) color of the document.
*/
fgColor: string;
/**
* Occurs to indicate the current playback position.
* @param ev The event.
*/
ontimeupdate: (ev: Event) => any;
/**
* Fires when the current selection changes.
* @param ev The event.
*/
onselect: (ev: UIEvent) => any;
ondrop: (ev: DragEvent) => any;
/**
* Occurs when the end of playback is reached.
* @param ev The event
*/
onended: (ev: Event) => any;
/**
* Gets a value that indicates whether standards-compliant mode is switched on for the object.
*/
compatMode: string;
/**
* Fires when the user repositions the scroll box in the scroll bar on the object.
* @param ev The event.
*/
onscroll: (ev: UIEvent) => any;
/**
* Fires to indicate that the current row has changed in the data source and new data values are available on the object.
* @param ev The event.
*/
onrowenter: (ev: MSEventObj) => any;
/**
* Fires immediately after the browser loads the object.
* @param ev The event.
*/
onload: (ev: Event) => any;
oninput: (ev: Event) => any;
onmspointerdown: (ev: any) => any;
msHidden: boolean;
msVisibilityState: string;
onmsgesturedoubletap: (ev: any) => any;
visibilityState: string;
onmsmanipulationstatechanged: (ev: any) => any;
onmspointerhover: (ev: any) => any;
onmscontentzoom: (ev: MSEventObj) => any;
onmspointermove: (ev: any) => any;
onmsgesturehold: (ev: any) => any;
onmsgesturechange: (ev: any) => any;
onmsgesturestart: (ev: any) => any;
onmspointercancel: (ev: any) => any;
onmsgestureend: (ev: any) => any;
onmsgesturetap: (ev: any) => any;
onmspointerout: (ev: any) => any;
onmsinertiastart: (ev: any) => any;
msCSSOMElementFloatMetrics: boolean;
onmspointerover: (ev: any) => any;
hidden: boolean;
onmspointerup: (ev: any) => any;
msFullscreenEnabled: boolean;
onmsfullscreenerror: (ev: any) => any;
onmspointerenter: (ev: any) => any;
msFullscreenElement: Element;
onmsfullscreenchange: (ev: any) => any;
onmspointerleave: (ev: any) => any;
/**
* Returns a reference to the first object with the specified value of the ID or NAME attribute.
* @param elementId String that specifies the ID value. Case-insensitive.
*/
getElementById(elementId: string): HTMLElement;
/**
* Returns the current value of the document, range, or current selection for the given command.
* @param commandId String that specifies a command identifier.
*/
queryCommandValue(commandId: string): string;
adoptNode(source: Node): Node;
/**
* Returns a Boolean value that indicates whether the specified command is in the indeterminate state.
* @param commandId String that specifies a command identifier.
*/
queryCommandIndeterm(commandId: string): boolean;
getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
createProcessingInstruction(target: string, data: string): ProcessingInstruction;
/**
* Executes a command on the current document, current selection, or the given range.
* @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
* @param showUI Display the user interface, defaults to false.
* @param value Value to assign.
*/
execCommand(commandId: string, showUI?: boolean, value?: any): boolean;
/**
* Returns the element for the specified x coordinate and the specified y coordinate.
* @param x The x-offset
* @param y The y-offset
*/
elementFromPoint(x: number, y: number): Element;
createCDATASection(data: string): CDATASection;
/**
* Retrieves the string associated with a command.
* @param commandId String that contains the identifier of a command. This can be any command identifier given in the list of Command Identifiers.
*/
queryCommandText(commandId: string): string;
/**
* Writes one or more HTML expressions to a document in the specified window.
* @param content Specifies the text and HTML tags to write.
*/
write(...content: string[]): void;
/**
* Allows updating the print settings for the page.
*/
updateSettings(): void;
/**
* Creates an instance of the element for the specified tag.
* @param tagName The name of an element.
*/
createElement(tagName: "a"): HTMLAnchorElement;
createElement(tagName: "abbr"): HTMLPhraseElement;
createElement(tagName: "acronym"): HTMLPhraseElement;
createElement(tagName: "address"): HTMLBlockElement;
createElement(tagName: "applet"): HTMLAppletElement;
createElement(tagName: "area"): HTMLAreaElement;
createElement(tagName: "article"): HTMLElement;
createElement(tagName: "aside"): HTMLElement;
createElement(tagName: "audio"): HTMLAudioElement;
createElement(tagName: "b"): HTMLPhraseElement;
createElement(tagName: "base"): HTMLBaseElement;
createElement(tagName: "basefont"): HTMLBaseFontElement;
createElement(tagName: "bdo"): HTMLPhraseElement;
createElement(tagName: "bgsound"): HTMLBGSoundElement;
createElement(tagName: "big"): HTMLPhraseElement;
createElement(tagName: "blockquote"): HTMLBlockElement;
createElement(tagName: "body"): HTMLBodyElement;
createElement(tagName: "br"): HTMLBRElement;
createElement(tagName: "button"): HTMLButtonElement;
createElement(tagName: "canvas"): HTMLCanvasElement;
createElement(tagName: "caption"): HTMLTableCaptionElement;
createElement(tagName: "center"): HTMLBlockElement;
createElement(tagName: "cite"): HTMLPhraseElement;
createElement(tagName: "code"): HTMLPhraseElement;
createElement(tagName: "col"): HTMLTableColElement;
createElement(tagName: "colgroup"): HTMLTableColElement;
createElement(tagName: "datalist"): HTMLDataListElement;
createElement(tagName: "dd"): HTMLDDElement;
createElement(tagName: "del"): HTMLModElement;
createElement(tagName: "dfn"): HTMLPhraseElement;
createElement(tagName: "dir"): HTMLDirectoryElement;
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "dl"): HTMLDListElement;
createElement(tagName: "dt"): HTMLDTElement;
createElement(tagName: "em"): HTMLPhraseElement;
createElement(tagName: "embed"): HTMLEmbedElement;
createElement(tagName: "fieldset"): HTMLFieldSetElement;
createElement(tagName: "figcaption"): HTMLElement;
createElement(tagName: "figure"): HTMLElement;
createElement(tagName: "font"): HTMLFontElement;
createElement(tagName: "footer"): HTMLElement;
createElement(tagName: "form"): HTMLFormElement;
createElement(tagName: "frame"): HTMLFrameElement;
createElement(tagName: "frameset"): HTMLFrameSetElement;
createElement(tagName: "h1"): HTMLHeadingElement;
createElement(tagName: "h2"): HTMLHeadingElement;
createElement(tagName: "h3"): HTMLHeadingElement;
createElement(tagName: "h4"): HTMLHeadingElement;
createElement(tagName: "h5"): HTMLHeadingElement;
createElement(tagName: "h6"): HTMLHeadingElement;
createElement(tagName: "head"): HTMLHeadElement;
createElement(tagName: "header"): HTMLElement;
createElement(tagName: "hgroup"): HTMLElement;
createElement(tagName: "hr"): HTMLHRElement;
createElement(tagName: "html"): HTMLHtmlElement;
createElement(tagName: "i"): HTMLPhraseElement;
createElement(tagName: "iframe"): HTMLIFrameElement;
createElement(tagName: "img"): HTMLImageElement;
createElement(tagName: "input"): HTMLInputElement;
createElement(tagName: "ins"): HTMLModElement;
createElement(tagName: "isindex"): HTMLIsIndexElement;
createElement(tagName: "kbd"): HTMLPhraseElement;
createElement(tagName: "keygen"): HTMLBlockElement;
createElement(tagName: "label"): HTMLLabelElement;
createElement(tagName: "legend"): HTMLLegendElement;
createElement(tagName: "li"): HTMLLIElement;
createElement(tagName: "link"): HTMLLinkElement;
createElement(tagName: "listing"): HTMLBlockElement;
createElement(tagName: "map"): HTMLMapElement;
createElement(tagName: "mark"): HTMLElement;
createElement(tagName: "marquee"): HTMLMarqueeElement;
createElement(tagName: "menu"): HTMLMenuElement;
createElement(tagName: "meta"): HTMLMetaElement;
createElement(tagName: "nav"): HTMLElement;
createElement(tagName: "nextid"): HTMLNextIdElement;
createElement(tagName: "nobr"): HTMLPhraseElement;
createElement(tagName: "noframes"): HTMLElement;
createElement(tagName: "noscript"): HTMLElement;
createElement(tagName: "object"): HTMLObjectElement;
createElement(tagName: "ol"): HTMLOListElement;
createElement(tagName: "optgroup"): HTMLOptGroupElement;
createElement(tagName: "option"): HTMLOptionElement;
createElement(tagName: "p"): HTMLParagraphElement;
createElement(tagName: "param"): HTMLParamElement;
createElement(tagName: "plaintext"): HTMLBlockElement;
createElement(tagName: "pre"): HTMLPreElement;
createElement(tagName: "progress"): HTMLProgressElement;
createElement(tagName: "q"): HTMLQuoteElement;
createElement(tagName: "rt"): HTMLPhraseElement;
createElement(tagName: "ruby"): HTMLPhraseElement;
createElement(tagName: "s"): HTMLPhraseElement;
createElement(tagName: "samp"): HTMLPhraseElement;
createElement(tagName: "script"): HTMLScriptElement;
createElement(tagName: "section"): HTMLElement;
createElement(tagName: "select"): HTMLSelectElement;
createElement(tagName: "small"): HTMLPhraseElement;
createElement(tagName: "SOURCE"): HTMLSourceElement;
createElement(tagName: "span"): HTMLSpanElement;
createElement(tagName: "strike"): HTMLPhraseElement;
createElement(tagName: "strong"): HTMLPhraseElement;
createElement(tagName: "style"): HTMLStyleElement;
createElement(tagName: "sub"): HTMLPhraseElement;
createElement(tagName: "sup"): HTMLPhraseElement;
createElement(tagName: "table"): HTMLTableElement;
createElement(tagName: "tbody"): HTMLTableSectionElement;
createElement(tagName: "td"): HTMLTableDataCellElement;
createElement(tagName: "textarea"): HTMLTextAreaElement;
createElement(tagName: "tfoot"): HTMLTableSectionElement;
createElement(tagName: "th"): HTMLTableHeaderCellElement;
createElement(tagName: "thead"): HTMLTableSectionElement;
createElement(tagName: "title"): HTMLTitleElement;
createElement(tagName: "tr"): HTMLTableRowElement;
createElement(tagName: "track"): HTMLTrackElement;
createElement(tagName: "tt"): HTMLPhraseElement;
createElement(tagName: "u"): HTMLPhraseElement;
createElement(tagName: "ul"): HTMLUListElement;
createElement(tagName: "var"): HTMLPhraseElement;
createElement(tagName: "video"): HTMLVideoElement;
createElement(tagName: "wbr"): HTMLElement;
createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement;
createElement(tagName: "xmp"): HTMLBlockElement;
createElement(tagName: string): HTMLElement;
/**
* Removes mouse capture from the object in the current document.
*/
releaseCapture(): void;
/**
* Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window.
* @param content The text and HTML tags to write.
*/
writeln(...content: string[]): void;
createElementNS(namespaceURI: string, qualifiedName: string): Element;
/**
* Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.
* @param url Specifies a MIME type for the document.
* @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.
* @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported.
* @param replace Specifies whether the existing entry for the document is replaced in the history list.
*/
open(url?: string, name?: string, features?: string, replace?: boolean): any;
/**
* Returns a Boolean value that indicates whether the current command is supported on the current range.
* @param commandId Specifies a command identifier.
*/
queryCommandSupported(commandId: string): boolean;
/**
* Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.
* @param root The root element or node to start traversing on.
* @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.
* @param filter A custom NodeFilter function to use.
* @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
*/
createTreeWalker(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): TreeWalker;
createAttributeNS(namespaceURI: string, qualifiedName: string): Attr;
/**
* Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.
* @param commandId Specifies a command identifier.
*/
queryCommandEnabled(commandId: string): boolean;
/**
* Causes the element to receive the focus and executes the code specified by the onfocus event.
*/
focus(): void;
/**
* Closes an output stream and forces the sent data to display.
*/
close(): void;
getElementsByClassName(classNames: string): NodeList;
importNode(importedNode: Node, deep: boolean): Node;
/**
* Returns an empty range object that has both of its boundary points positioned at the beginning of the document.
*/
createRange(): Range;
/**
* Fires a specified event on the object.
* @param eventName Specifies the name of the event to fire.
* @param eventObj Object that specifies the event object from which to obtain event object properties.
*/
fireEvent(eventName: string, eventObj?: any): boolean;
/**
* Creates a comment object with the specified data.
* @param data Sets the comment object's data.
*/
createComment(data: string): Comment;
/**
* Retrieves a collection of objects based on the specified element name.
* @param name Specifies the name of an element.
*/
getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
getElementsByTagName(name: "abbr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "acronym"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "address"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "applet"): NodeListOf<HTMLAppletElement>;
getElementsByTagName(name: "area"): NodeListOf<HTMLAreaElement>;
getElementsByTagName(name: "article"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "aside"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "audio"): NodeListOf<HTMLAudioElement>;
getElementsByTagName(name: "b"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "base"): NodeListOf<HTMLBaseElement>;
getElementsByTagName(name: "basefont"): NodeListOf<HTMLBaseFontElement>;
getElementsByTagName(name: "bdo"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "bgsound"): NodeListOf<HTMLBGSoundElement>;
getElementsByTagName(name: "big"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "blockquote"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
getElementsByTagName(name: "br"): NodeListOf<HTMLBRElement>;
getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
getElementsByTagName(name: "canvas"): NodeListOf<HTMLCanvasElement>;
getElementsByTagName(name: "caption"): NodeListOf<HTMLTableCaptionElement>;
getElementsByTagName(name: "center"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "cite"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "code"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "col"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "colgroup"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "datalist"): NodeListOf<HTMLDataListElement>;
getElementsByTagName(name: "dd"): NodeListOf<HTMLDDElement>;
getElementsByTagName(name: "del"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "dfn"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "dir"): NodeListOf<HTMLDirectoryElement>;
getElementsByTagName(name: "div"): NodeListOf<HTMLDivElement>;
getElementsByTagName(name: "dl"): NodeListOf<HTMLDListElement>;
getElementsByTagName(name: "dt"): NodeListOf<HTMLDTElement>;
getElementsByTagName(name: "em"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "embed"): NodeListOf<HTMLEmbedElement>;
getElementsByTagName(name: "fieldset"): NodeListOf<HTMLFieldSetElement>;
getElementsByTagName(name: "figcaption"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "figure"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "font"): NodeListOf<HTMLFontElement>;
getElementsByTagName(name: "footer"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
getElementsByTagName(name: "frame"): NodeListOf<HTMLFrameElement>;
getElementsByTagName(name: "frameset"): NodeListOf<HTMLFrameSetElement>;
getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h2"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h3"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h4"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h5"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h6"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "head"): NodeListOf<HTMLHeadElement>;
getElementsByTagName(name: "header"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hgroup"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hr"): NodeListOf<HTMLHRElement>;
getElementsByTagName(name: "html"): NodeListOf<HTMLHtmlElement>;
getElementsByTagName(name: "i"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "iframe"): NodeListOf<HTMLIFrameElement>;
getElementsByTagName(name: "img"): NodeListOf<HTMLImageElement>;
getElementsByTagName(name: "input"): NodeListOf<HTMLInputElement>;
getElementsByTagName(name: "ins"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "isindex"): NodeListOf<HTMLIsIndexElement>;
getElementsByTagName(name: "kbd"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "keygen"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "label"): NodeListOf<HTMLLabelElement>;
getElementsByTagName(name: "legend"): NodeListOf<HTMLLegendElement>;
getElementsByTagName(name: "li"): NodeListOf<HTMLLIElement>;
getElementsByTagName(name: "link"): NodeListOf<HTMLLinkElement>;
getElementsByTagName(name: "listing"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "map"): NodeListOf<HTMLMapElement>;
getElementsByTagName(name: "mark"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "marquee"): NodeListOf<HTMLMarqueeElement>;
getElementsByTagName(name: "menu"): NodeListOf<HTMLMenuElement>;
getElementsByTagName(name: "meta"): NodeListOf<HTMLMetaElement>;
getElementsByTagName(name: "nav"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "nextid"): NodeListOf<HTMLNextIdElement>;
getElementsByTagName(name: "nobr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "noframes"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "noscript"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "object"): NodeListOf<HTMLObjectElement>;
getElementsByTagName(name: "ol"): NodeListOf<HTMLOListElement>;
getElementsByTagName(name: "optgroup"): NodeListOf<HTMLOptGroupElement>;
getElementsByTagName(name: "option"): NodeListOf<HTMLOptionElement>;
getElementsByTagName(name: "p"): NodeListOf<HTMLParagraphElement>;
getElementsByTagName(name: "param"): NodeListOf<HTMLParamElement>;
getElementsByTagName(name: "plaintext"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "pre"): NodeListOf<HTMLPreElement>;
getElementsByTagName(name: "progress"): NodeListOf<HTMLProgressElement>;
getElementsByTagName(name: "q"): NodeListOf<HTMLQuoteElement>;
getElementsByTagName(name: "rt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ruby"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "s"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "samp"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "script"): NodeListOf<HTMLScriptElement>;
getElementsByTagName(name: "section"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "select"): NodeListOf<HTMLSelectElement>;
getElementsByTagName(name: "small"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "SOURCE"): NodeListOf<HTMLSourceElement>;
getElementsByTagName(name: "span"): NodeListOf<HTMLSpanElement>;
getElementsByTagName(name: "strike"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "strong"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "style"): NodeListOf<HTMLStyleElement>;
getElementsByTagName(name: "sub"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "sup"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "table"): NodeListOf<HTMLTableElement>;
getElementsByTagName(name: "tbody"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "td"): NodeListOf<HTMLTableDataCellElement>;
getElementsByTagName(name: "textarea"): NodeListOf<HTMLTextAreaElement>;
getElementsByTagName(name: "tfoot"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "th"): NodeListOf<HTMLTableHeaderCellElement>;
getElementsByTagName(name: "thead"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "title"): NodeListOf<HTMLTitleElement>;
getElementsByTagName(name: "tr"): NodeListOf<HTMLTableRowElement>;
getElementsByTagName(name: "track"): NodeListOf<HTMLTrackElement>;
getElementsByTagName(name: "tt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "u"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ul"): NodeListOf<HTMLUListElement>;
getElementsByTagName(name: "var"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "video"): NodeListOf<HTMLVideoElement>;
getElementsByTagName(name: "wbr"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
getElementsByTagName(name: "xmp"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: string): NodeList;
/**
* Creates a new document.
*/
createDocumentFragment(): DocumentFragment;
/**
* Creates a style sheet for the document.
* @param href Specifies how to add the style sheet to the document. If a file name is specified for the URL, the style information is added as a link object. If the URL contains style information, it is added to the style object.
* @param index Specifies the index that indicates where the new style sheet is inserted in the styleSheets collection. The default is to insert the new style sheet at the end of the collection.
*/
createStyleSheet(href?: string, index?: number): CSSStyleSheet;
/**
* Gets a collection of objects based on the value of the NAME or ID attribute.
* @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.
*/
getElementsByName(elementName: string): NodeList;
/**
* Returns a Boolean value that indicates the current state of the command.
* @param commandId String that specifies a command identifier.
*/
queryCommandState(commandId: string): boolean;
/**
* Gets a value indicating whether the object currently has focus.
*/
hasFocus(): boolean;
/**
* Displays help information for the given command identifier.
* @param commandId Displays help information for the given command identifier.
*/
execCommandShowHelp(commandId: string): boolean;
/**
* Creates an attribute object with a specified name.
* @param name String that sets the attribute object's name.
*/
createAttribute(name: string): Attr;
/**
* Creates a text string from the specified value.
* @param data String that specifies the nodeValue property of the text node.
*/
createTextNode(data: string): Text;
/**
* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
* @param root The root element or node to start traversing on.
* @param whatToShow The type of nodes or elements to appear in the node list
* @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.
* @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
*/
createNodeIterator(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): NodeIterator;
/**
* Generates an event object to pass event context information when you use the fireEvent method.
* @param eventObj An object that specifies an existing event object on which to base the new object.
*/
createEventObject(eventObj?: any): MSEventObj;
/**
* Returns an object representing the current selection of the document that is loaded into the object displaying a webpage.
*/
getSelection(): Selection;
msElementsFromPoint(x: number, y: number): NodeList;
msElementsFromRect(left: number, top: number, width: number, height: number): NodeList;
clear(): void;
msExitFullscreen(): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "storagecommit", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msfullscreenerror", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msfullscreenchange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Document: {
prototype: Document;
new(): Document;
}
interface Console {
info(message?: any, ...optionalParams: any[]): void;
warn(message?: any, ...optionalParams: any[]): void;
error(message?: any, ...optionalParams: any[]): void;
log(message?: any, ...optionalParams: any[]): void;
profile(reportName?: string): void;
assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
msIsIndependentlyComposed(element: Element): boolean;
clear(): void;
dir(value?: any, ...optionalParams: any[]): void;
profileEnd(): void;
count(countTitle?: string): void;
groupEnd(): void;
time(timerName?: string): void;
timeEnd(timerName?: string): void;
trace(): void;
group(groupTitle?: string): void;
dirxml(value: any): void;
debug(message?: string, ...optionalParams: any[]): void;
groupCollapsed(groupTitle?: string): void;
select(element: Element): void;
}
declare var Console: {
prototype: Console;
new(): Console;
}
interface MSEventObj extends Event {
nextPage: string;
keyCode: number;
toElement: Element;
returnValue: any;
dataFld: string;
y: number;
dataTransfer: DataTransfer;
propertyName: string;
url: string;
offsetX: number;
recordset: any;
screenX: number;
buttonID: number;
wheelDelta: number;
reason: number;
origin: string;
data: string;
srcFilter: any;
boundElements: HTMLCollection;
cancelBubble: boolean;
altLeft: boolean;
behaviorCookie: number;
bookmarks: BookmarkCollection;
type: string;
repeat: boolean;
srcElement: Element;
source: Window;
fromElement: Element;
offsetY: number;
x: number;
behaviorPart: number;
qualifier: string;
altKey: boolean;
ctrlKey: boolean;
clientY: number;
shiftKey: boolean;
shiftLeft: boolean;
contentOverflow: boolean;
screenY: number;
ctrlLeft: boolean;
button: number;
srcUrn: string;
clientX: number;
actionURL: string;
getAttribute(strAttributeName: string, lFlags?: number): any;
setAttribute(strAttributeName: string, AttributeValue: any, lFlags?: number): void;
removeAttribute(strAttributeName: string, lFlags?: number): boolean;
}
declare var MSEventObj: {
prototype: MSEventObj;
new(): MSEventObj;
}
interface HTMLCanvasElement extends HTMLElement {
/**
* Gets or sets the width of a canvas element on a document.
*/
width: number;
/**
* Gets or sets the height of a canvas element on a document.
*/
height: number;
/**
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
*/
getContext(contextId: "2d"): CanvasRenderingContext2D;
/**
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
*/
getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
/**
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
*/
getContext(contextId: string, ...args: any[]): any;
/**
* Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element.
* @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image.
*/
toDataURL(type?: string, ...args: any[]): string;
/**
* Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
*/
msToBlob(): Blob;
}
declare var HTMLCanvasElement: {
prototype: HTMLCanvasElement;
new(): HTMLCanvasElement;
}
interface Window extends EventTarget, MSEventAttachmentTarget, WindowLocalStorage, MSWindowExtensions, WindowSessionStorage, WindowTimers, WindowBase64, IDBEnvironment, WindowConsole, GlobalEventHandlers {
ondragend: (ev: DragEvent) => any;
onkeydown: (ev: KeyboardEvent) => any;
ondragover: (ev: DragEvent) => any;
onkeyup: (ev: KeyboardEvent) => any;
onreset: (ev: Event) => any;
onmouseup: (ev: MouseEvent) => any;
ondragstart: (ev: DragEvent) => any;
ondrag: (ev: DragEvent) => any;
screenX: number;
onmouseover: (ev: MouseEvent) => any;
ondragleave: (ev: DragEvent) => any;
history: History;
pageXOffset: number;
name: string;
onafterprint: (ev: Event) => any;
onpause: (ev: Event) => any;
onbeforeprint: (ev: Event) => any;
top: Window;
onmousedown: (ev: MouseEvent) => any;
onseeked: (ev: Event) => any;
opener: Window;
onclick: (ev: MouseEvent) => any;
innerHeight: number;
onwaiting: (ev: Event) => any;
ononline: (ev: Event) => any;
ondurationchange: (ev: Event) => any;
frames: Window;
onblur: (ev: FocusEvent) => any;
onemptied: (ev: Event) => any;
onseeking: (ev: Event) => any;
oncanplay: (ev: Event) => any;
outerWidth: number;
onstalled: (ev: Event) => any;
onmousemove: (ev: MouseEvent) => any;
innerWidth: number;
onoffline: (ev: Event) => any;
length: number;
screen: Screen;
onbeforeunload: (ev: BeforeUnloadEvent) => any;
onratechange: (ev: Event) => any;
onstorage: (ev: StorageEvent) => any;
onloadstart: (ev: Event) => any;
ondragenter: (ev: DragEvent) => any;
onsubmit: (ev: Event) => any;
self: Window;
document: Document;
onprogress: (ev: ProgressEvent) => any;
ondblclick: (ev: MouseEvent) => any;
pageYOffset: number;
oncontextmenu: (ev: MouseEvent) => any;
onchange: (ev: Event) => any;
onloadedmetadata: (ev: Event) => any;
onplay: (ev: Event) => any;
onerror: ErrorEventHandler;
onplaying: (ev: Event) => any;
parent: Window;
location: Location;
oncanplaythrough: (ev: Event) => any;
onabort: (ev: UIEvent) => any;
onreadystatechange: (ev: Event) => any;
outerHeight: number;
onkeypress: (ev: KeyboardEvent) => any;
frameElement: Element;
onloadeddata: (ev: Event) => any;
onsuspend: (ev: Event) => any;
window: Window;
onfocus: (ev: FocusEvent) => any;
onmessage: (ev: MessageEvent) => any;
ontimeupdate: (ev: Event) => any;
onresize: (ev: UIEvent) => any;
onselect: (ev: UIEvent) => any;
navigator: Navigator;
styleMedia: StyleMedia;
ondrop: (ev: DragEvent) => any;
onmouseout: (ev: MouseEvent) => any;
onended: (ev: Event) => any;
onhashchange: (ev: Event) => any;
onunload: (ev: Event) => any;
onscroll: (ev: UIEvent) => any;
screenY: number;
onmousewheel: (ev: MouseWheelEvent) => any;
onload: (ev: Event) => any;
onvolumechange: (ev: Event) => any;
oninput: (ev: Event) => any;
performance: Performance;
onmspointerdown: (ev: any) => any;
animationStartTime: number;
onmsgesturedoubletap: (ev: any) => any;
onmspointerhover: (ev: any) => any;
onmsgesturehold: (ev: any) => any;
onmspointermove: (ev: any) => any;
onmsgesturechange: (ev: any) => any;
onmsgesturestart: (ev: any) => any;
onmspointercancel: (ev: any) => any;
onmsgestureend: (ev: any) => any;
onmsgesturetap: (ev: any) => any;
onmspointerout: (ev: any) => any;
msAnimationStartTime: number;
applicationCache: ApplicationCache;
onmsinertiastart: (ev: any) => any;
onmspointerover: (ev: any) => any;
onpopstate: (ev: PopStateEvent) => any;
onmspointerup: (ev: any) => any;
onpageshow: (ev: PageTransitionEvent) => any;
ondevicemotion: (ev: DeviceMotionEvent) => any;
devicePixelRatio: number;
msCrypto: Crypto;
ondeviceorientation: (ev: DeviceOrientationEvent) => any;
doNotTrack: string;
onmspointerenter: (ev: any) => any;
onpagehide: (ev: PageTransitionEvent) => any;
onmspointerleave: (ev: any) => any;
alert(message?: any): void;
scroll(x?: number, y?: number): void;
focus(): void;
scrollTo(x?: number, y?: number): void;
print(): void;
prompt(message?: string, _default?: string): string;
toString(): string;
open(url?: string, target?: string, features?: string, replace?: boolean): Window;
scrollBy(x?: number, y?: number): void;
confirm(message?: string): boolean;
close(): void;
postMessage(message: any, targetOrigin: string, ports?: any): void;
showModalDialog(url?: string, argument?: any, options?: any): any;
blur(): void;
getSelection(): Selection;
getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
msCancelRequestAnimationFrame(handle: number): void;
matchMedia(mediaQuery: string): MediaQueryList;
cancelAnimationFrame(handle: number): void;
msIsStaticHTML(html: string): boolean;
msMatchMedia(mediaQuery: string): MediaQueryList;
requestAnimationFrame(callback: FrameRequestCallback): number;
msRequestAnimationFrame(callback: FrameRequestCallback): number;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Window: {
prototype: Window;
new(): Window;
}
interface HTMLCollection extends MSHTMLCollectionExtensions {
/**
* Sets or retrieves the number of objects in a collection.
*/
length: number;
/**
* Retrieves an object from various collections.
*/
item(nameOrIndex?: any, optionalIndex?: any): Element;
/**
* Retrieves a select object or an object from an options collection.
*/
namedItem(name: string): Element;
// [name: string]: Element;
[index: number]: Element;
}
declare var HTMLCollection: {
prototype: HTMLCollection;
new(): HTMLCollection;
}
interface BlobPropertyBag {
type?: string;
endings?: string;
}
interface Blob {
type: string;
size: number;
msDetachStream(): any;
slice(start?: number, end?: number, contentType?: string): Blob;
msClose(): void;
}
declare var Blob: {
prototype: Blob;
new (blobParts?: any[], options?: BlobPropertyBag): Blob;
}
interface NavigatorID {
appVersion: string;
appName: string;
userAgent: string;
platform: string;
product: string;
vendor: string;
}
interface HTMLTableElement extends HTMLElement, MSDataBindingTableExtensions, MSDataBindingExtensions, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorLight: any;
/**
* Sets or retrieves the amount of space between cells in a table.
*/
cellSpacing: string;
/**
* Retrieves the tFoot object of the table.
*/
tFoot: HTMLTableSectionElement;
/**
* Sets or retrieves the way the border frame around the table is displayed.
*/
frame: string;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the number of horizontal rows contained in the object.
*/
rows: HTMLCollection;
/**
* Sets or retrieves which dividing lines (inner borders) are displayed.
*/
rules: string;
/**
* Sets or retrieves the number of columns in the table.
*/
cols: number;
/**
* Sets or retrieves a description and/or structure of the object.
*/
summary: string;
/**
* Retrieves the caption object of a table.
*/
caption: HTMLTableCaptionElement;
/**
* Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order.
*/
tBodies: HTMLCollection;
/**
* Retrieves the tHead object of the table.
*/
tHead: HTMLTableSectionElement;
/**
* Sets or retrieves a value that indicates the table alignment.
*/
align: string;
/**
* Retrieves a collection of all cells in the table row or in the entire table.
*/
cells: HTMLCollection;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Sets or retrieves the amount of space between the border of the cell and the content of the cell.
*/
cellPadding: string;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
border: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorDark: any;
/**
* Removes the specified row (tr) from the element and from the rows collection.
* @param index Number that specifies the zero-based position in the rows collection of the row to remove.
*/
deleteRow(index?: number): void;
/**
* Creates an empty tBody element in the table.
*/
createTBody(): HTMLElement;
/**
* Deletes the caption element and its contents from the table.
*/
deleteCaption(): void;
/**
* Creates a new row (tr) in the table, and adds the row to the rows collection.
* @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
*/
insertRow(index?: number): HTMLElement;
/**
* Deletes the tFoot element and its contents from the table.
*/
deleteTFoot(): void;
/**
* Returns the tHead element object if successful, or null otherwise.
*/
createTHead(): HTMLElement;
/**
* Deletes the tHead element and its contents from the table.
*/
deleteTHead(): void;
/**
* Creates an empty caption element in the table.
*/
createCaption(): HTMLElement;
/**
* Moves a table row to a new position.
* @param indexFrom Number that specifies the index in the rows collection of the table row that is moved.
* @param indexTo Number that specifies where the row is moved within the rows collection.
*/
moveRow(indexFrom?: number, indexTo?: number): any;
/**
* Creates an empty tFoot element in the table.
*/
createTFoot(): HTMLElement;
}
declare var HTMLTableElement: {
prototype: HTMLTableElement;
new(): HTMLTableElement;
}
interface TreeWalker {
whatToShow: number;
filter: NodeFilter;
root: Node;
currentNode: Node;
expandEntityReferences: boolean;
previousSibling(): Node;
lastChild(): Node;
nextSibling(): Node;
nextNode(): Node;
parentNode(): Node;
firstChild(): Node;
previousNode(): Node;
}
declare var TreeWalker: {
prototype: TreeWalker;
new(): TreeWalker;
}
interface GetSVGDocument {
getSVGDocument(): Document;
}
interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
y: number;
y1: number;
x: number;
x1: number;
}
declare var SVGPathSegCurvetoQuadraticRel: {
prototype: SVGPathSegCurvetoQuadraticRel;
new(): SVGPathSegCurvetoQuadraticRel;
}
interface Performance {
navigation: PerformanceNavigation;
timing: PerformanceTiming;
getEntriesByType(entryType: string): any;
toJSON(): any;
getMeasures(measureName?: string): any;
clearMarks(markName?: string): void;
getMarks(markName?: string): any;
clearResourceTimings(): void;
mark(markName: string): void;
measure(measureName: string, startMarkName?: string, endMarkName?: string): void;
getEntriesByName(name: string, entryType?: string): any;
getEntries(): any;
clearMeasures(measureName?: string): void;
setResourceTimingBufferSize(maxSize: number): void;
now(): number;
}
declare var Performance: {
prototype: Performance;
new(): Performance;
}
interface MSDataBindingTableExtensions {
dataPageSize: number;
nextPage(): void;
firstPage(): void;
refresh(): void;
previousPage(): void;
lastPage(): void;
}
interface CompositionEvent extends UIEvent {
data: string;
locale: string;
initCompositionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, locale: string): void;
}
declare var CompositionEvent: {
prototype: CompositionEvent;
new(): CompositionEvent;
}
interface WindowTimers extends WindowTimersExtension {
clearTimeout(handle: number): void;
setTimeout(handler: any, timeout?: any, ...args: any[]): number;
clearInterval(handle: number): void;
setInterval(handler: any, timeout?: any, ...args: any[]): number;
}
interface SVGMarkerElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired {
orientType: SVGAnimatedEnumeration;
markerUnits: SVGAnimatedEnumeration;
markerWidth: SVGAnimatedLength;
markerHeight: SVGAnimatedLength;
orientAngle: SVGAnimatedAngle;
refY: SVGAnimatedLength;
refX: SVGAnimatedLength;
setOrientToAngle(angle: SVGAngle): void;
setOrientToAuto(): void;
SVG_MARKER_ORIENT_UNKNOWN: number;
SVG_MARKER_ORIENT_ANGLE: number;
SVG_MARKERUNITS_UNKNOWN: number;
SVG_MARKERUNITS_STROKEWIDTH: number;
SVG_MARKER_ORIENT_AUTO: number;
SVG_MARKERUNITS_USERSPACEONUSE: number;
}
declare var SVGMarkerElement: {
prototype: SVGMarkerElement;
new(): SVGMarkerElement;
SVG_MARKER_ORIENT_UNKNOWN: number;
SVG_MARKER_ORIENT_ANGLE: number;
SVG_MARKERUNITS_UNKNOWN: number;
SVG_MARKERUNITS_STROKEWIDTH: number;
SVG_MARKER_ORIENT_AUTO: number;
SVG_MARKERUNITS_USERSPACEONUSE: number;
}
interface CSSStyleDeclaration {
backgroundAttachment: string;
visibility: string;
textAlignLast: string;
borderRightStyle: string;
counterIncrement: string;
orphans: string;
cssText: string;
borderStyle: string;
pointerEvents: string;
borderTopColor: string;
markerEnd: string;
textIndent: string;
listStyleImage: string;
cursor: string;
listStylePosition: string;
wordWrap: string;
borderTopStyle: string;
alignmentBaseline: string;
opacity: string;
direction: string;
strokeMiterlimit: string;
maxWidth: string;
color: string;
clip: string;
borderRightWidth: string;
verticalAlign: string;
overflow: string;
mask: string;
borderLeftStyle: string;
emptyCells: string;
stopOpacity: string;
paddingRight: string;
parentRule: CSSRule;
background: string;
boxSizing: string;
textJustify: string;
height: string;
paddingTop: string;
length: number;
right: string;
baselineShift: string;
borderLeft: string;
widows: string;
lineHeight: string;
left: string;
textUnderlinePosition: string;
glyphOrientationHorizontal: string;
display: string;
textAnchor: string;
cssFloat: string;
strokeDasharray: string;
rubyAlign: string;
fontSizeAdjust: string;
borderLeftColor: string;
backgroundImage: string;
listStyleType: string;
strokeWidth: string;
textOverflow: string;
fillRule: string;
borderBottomColor: string;
zIndex: string;
position: string;
listStyle: string;
msTransformOrigin: string;
dominantBaseline: string;
overflowY: string;
fill: string;
captionSide: string;
borderCollapse: string;
boxShadow: string;
quotes: string;
tableLayout: string;
unicodeBidi: string;
borderBottomWidth: string;
backgroundSize: string;
textDecoration: string;
strokeDashoffset: string;
fontSize: string;
border: string;
pageBreakBefore: string;
borderTopRightRadius: string;
msTransform: string;
borderBottomLeftRadius: string;
textTransform: string;
rubyPosition: string;
strokeLinejoin: string;
clipPath: string;
borderRightColor: string;
fontFamily: string;
clear: string;
content: string;
backgroundClip: string;
marginBottom: string;
counterReset: string;
outlineWidth: string;
marginRight: string;
paddingLeft: string;
borderBottom: string;
wordBreak: string;
marginTop: string;
top: string;
fontWeight: string;
borderRight: string;
width: string;
kerning: string;
pageBreakAfter: string;
borderBottomStyle: string;
fontStretch: string;
padding: string;
strokeOpacity: string;
markerStart: string;
bottom: string;
borderLeftWidth: string;
clipRule: string;
backgroundPosition: string;
backgroundColor: string;
pageBreakInside: string;
backgroundOrigin: string;
strokeLinecap: string;
borderTopWidth: string;
outlineStyle: string;
borderTop: string;
outlineColor: string;
paddingBottom: string;
marginLeft: string;
font: string;
outline: string;
wordSpacing: string;
maxHeight: string;
fillOpacity: string;
letterSpacing: string;
borderSpacing: string;
backgroundRepeat: string;
borderRadius: string;
borderWidth: string;
borderBottomRightRadius: string;
whiteSpace: string;
fontStyle: string;
minWidth: string;
stopColor: string;
borderTopLeftRadius: string;
borderColor: string;
marker: string;
glyphOrientationVertical: string;
markerMid: string;
fontVariant: string;
minHeight: string;
stroke: string;
rubyOverhang: string;
overflowX: string;
textAlign: string;
margin: string;
animationFillMode: string;
floodColor: string;
animationIterationCount: string;
textShadow: string;
backfaceVisibility: string;
msAnimationIterationCount: string;
animationDelay: string;
animationTimingFunction: string;
columnWidth: any;
msScrollSnapX: string;
columnRuleColor: any;
columnRuleWidth: any;
transitionDelay: string;
transition: string;
msFlowFrom: string;
msScrollSnapType: string;
msContentZoomSnapType: string;
msGridColumns: string;
msAnimationName: string;
msGridRowAlign: string;
msContentZoomChaining: string;
msGridColumn: any;
msHyphenateLimitZone: any;
msScrollRails: string;
msAnimationDelay: string;
enableBackground: string;
msWrapThrough: string;
columnRuleStyle: string;
msAnimation: string;
msFlexFlow: string;
msScrollSnapY: string;
msHyphenateLimitLines: any;
msTouchAction: string;
msScrollLimit: string;
animation: string;
transform: string;
filter: string;
colorInterpolationFilters: string;
transitionTimingFunction: string;
msBackfaceVisibility: string;
animationPlayState: string;
transformOrigin: string;
msScrollLimitYMin: any;
msFontFeatureSettings: string;
msContentZoomLimitMin: any;
columnGap: any;
transitionProperty: string;
msAnimationDuration: string;
msAnimationFillMode: string;
msFlexDirection: string;
msTransitionDuration: string;
fontFeatureSettings: string;
breakBefore: string;
msFlexWrap: string;
perspective: string;
msFlowInto: string;
msTransformStyle: string;
msScrollTranslation: string;
msTransitionProperty: string;
msUserSelect: string;
msOverflowStyle: string;
msScrollSnapPointsY: string;
animationDirection: string;
animationDuration: string;
msFlex: string;
msTransitionTimingFunction: string;
animationName: string;
columnRule: string;
msGridColumnSpan: any;
msFlexNegative: string;
columnFill: string;
msGridRow: any;
msFlexOrder: string;
msFlexItemAlign: string;
msFlexPositive: string;
msContentZoomLimitMax: any;
msScrollLimitYMax: any;
msGridColumnAlign: string;
perspectiveOrigin: string;
lightingColor: string;
columns: string;
msScrollChaining: string;
msHyphenateLimitChars: string;
msTouchSelect: string;
floodOpacity: string;
msAnimationDirection: string;
msAnimationPlayState: string;
columnSpan: string;
msContentZooming: string;
msPerspective: string;
msFlexPack: string;
msScrollSnapPointsX: string;
msContentZoomSnapPoints: string;
msGridRowSpan: any;
msContentZoomSnap: string;
msScrollLimitXMin: any;
breakInside: string;
msHighContrastAdjust: string;
msFlexLinePack: string;
msGridRows: string;
transitionDuration: string;
msHyphens: string;
breakAfter: string;
msTransition: string;
msPerspectiveOrigin: string;
msContentZoomLimit: string;
msScrollLimitXMax: any;
msFlexAlign: string;
msWrapMargin: any;
columnCount: any;
msAnimationTimingFunction: string;
msTransitionDelay: string;
transformStyle: string;
msWrapFlow: string;
msFlexPreferredSize: string;
alignItems: string;
borderImageSource: string;
flexBasis: string;
borderImageWidth: string;
borderImageRepeat: string;
order: string;
flex: string;
alignContent: string;
msImeAlign: string;
flexShrink: string;
flexGrow: string;
borderImageSlice: string;
flexWrap: string;
borderImageOutset: string;
flexDirection: string;
touchAction: string;
flexFlow: string;
borderImage: string;
justifyContent: string;
alignSelf: string;
msTextCombineHorizontal: string;
getPropertyPriority(propertyName: string): string;
getPropertyValue(propertyName: string): string;
removeProperty(propertyName: string): string;
item(index: number): string;
[index: number]: string;
setProperty(propertyName: string, value: string, priority?: string): void;
}
declare var CSSStyleDeclaration: {
prototype: CSSStyleDeclaration;
new(): CSSStyleDeclaration;
}
interface SVGGElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGGElement: {
prototype: SVGGElement;
new(): SVGGElement;
}
interface MSStyleCSSProperties extends MSCSSProperties {
pixelWidth: number;
posHeight: number;
posLeft: number;
pixelTop: number;
pixelBottom: number;
textDecorationNone: boolean;
pixelLeft: number;
posTop: number;
posBottom: number;
textDecorationOverline: boolean;
posWidth: number;
textDecorationLineThrough: boolean;
pixelHeight: number;
textDecorationBlink: boolean;
posRight: number;
pixelRight: number;
textDecorationUnderline: boolean;
}
declare var MSStyleCSSProperties: {
prototype: MSStyleCSSProperties;
new(): MSStyleCSSProperties;
}
interface Navigator extends NavigatorID, NavigatorOnLine, NavigatorContentUtils, MSNavigatorExtensions, NavigatorGeolocation, MSNavigatorDoNotTrack, NavigatorStorageUtils, MSFileSaver {
msMaxTouchPoints: number;
msPointerEnabled: boolean;
msManipulationViewsEnabled: boolean;
pointerEnabled: boolean;
maxTouchPoints: number;
msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void;
}
declare var Navigator: {
prototype: Navigator;
new(): Navigator;
}
interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
y: number;
x2: number;
x: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicSmoothAbs: {
prototype: SVGPathSegCurvetoCubicSmoothAbs;
new(): SVGPathSegCurvetoCubicSmoothAbs;
}
interface SVGZoomEvent extends UIEvent {
zoomRectScreen: SVGRect;
previousScale: number;
newScale: number;
previousTranslate: SVGPoint;
newTranslate: SVGPoint;
}
declare var SVGZoomEvent: {
prototype: SVGZoomEvent;
new(): SVGZoomEvent;
}
interface NodeSelector {
querySelectorAll(selectors: string): NodeList;
querySelector(selectors: string): Element;
}
interface HTMLTableDataCellElement extends HTMLTableCellElement {
}
declare var HTMLTableDataCellElement: {
prototype: HTMLTableDataCellElement;
new(): HTMLTableDataCellElement;
}
interface HTMLBaseElement extends HTMLElement {
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Gets or sets the baseline URL on which relative links are based.
*/
href: string;
}
declare var HTMLBaseElement: {
prototype: HTMLBaseElement;
new(): HTMLBaseElement;
}
interface ClientRect {
left: number;
width: number;
right: number;
top: number;
bottom: number;
height: number;
}
declare var ClientRect: {
prototype: ClientRect;
new(): ClientRect;
}
interface PositionErrorCallback {
(error: PositionError): void;
}
interface DOMImplementation {
createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;
createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document;
hasFeature(feature: string, version?: string): boolean;
createHTMLDocument(title: string): Document;
}
declare var DOMImplementation: {
prototype: DOMImplementation;
new(): DOMImplementation;
}
interface SVGUnitTypes {
SVG_UNIT_TYPE_UNKNOWN: number;
SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number;
SVG_UNIT_TYPE_USERSPACEONUSE: number;
}
declare var SVGUnitTypes: SVGUnitTypes;
interface Element extends Node, NodeSelector, ElementTraversal, GlobalEventHandlers {
scrollTop: number;
clientLeft: number;
scrollLeft: number;
tagName: string;
clientWidth: number;
scrollWidth: number;
clientHeight: number;
clientTop: number;
scrollHeight: number;
msRegionOverflow: string;
onmspointerdown: (ev: any) => any;
onmsgotpointercapture: (ev: any) => any;
onmsgesturedoubletap: (ev: any) => any;
onmspointerhover: (ev: any) => any;
onmsgesturehold: (ev: any) => any;
onmspointermove: (ev: any) => any;
onmsgesturechange: (ev: any) => any;
onmsgesturestart: (ev: any) => any;
onmspointercancel: (ev: any) => any;
onmsgestureend: (ev: any) => any;
onmsgesturetap: (ev: any) => any;
onmspointerout: (ev: any) => any;
onmsinertiastart: (ev: any) => any;
onmslostpointercapture: (ev: any) => any;
onmspointerover: (ev: any) => any;
msContentZoomFactor: number;
onmspointerup: (ev: any) => any;
onlostpointercapture: (ev: PointerEvent) => any;
onmspointerenter: (ev: any) => any;
ongotpointercapture: (ev: PointerEvent) => any;
onmspointerleave: (ev: any) => any;
getAttribute(name?: string): string;
getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
hasAttributeNS(namespaceURI: string, localName: string): boolean;
getBoundingClientRect(): ClientRect;
getAttributeNS(namespaceURI: string, localName: string): string;
getAttributeNodeNS(namespaceURI: string, localName: string): Attr;
setAttributeNodeNS(newAttr: Attr): Attr;
msMatchesSelector(selectors: string): boolean;
hasAttribute(name: string): boolean;
removeAttribute(name?: string): void;
setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void;
getAttributeNode(name: string): Attr;
fireEvent(eventName: string, eventObj?: any): boolean;
getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
getElementsByTagName(name: "abbr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "acronym"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "address"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "applet"): NodeListOf<HTMLAppletElement>;
getElementsByTagName(name: "area"): NodeListOf<HTMLAreaElement>;
getElementsByTagName(name: "article"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "aside"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "audio"): NodeListOf<HTMLAudioElement>;
getElementsByTagName(name: "b"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "base"): NodeListOf<HTMLBaseElement>;
getElementsByTagName(name: "basefont"): NodeListOf<HTMLBaseFontElement>;
getElementsByTagName(name: "bdo"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "bgsound"): NodeListOf<HTMLBGSoundElement>;
getElementsByTagName(name: "big"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "blockquote"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
getElementsByTagName(name: "br"): NodeListOf<HTMLBRElement>;
getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
getElementsByTagName(name: "canvas"): NodeListOf<HTMLCanvasElement>;
getElementsByTagName(name: "caption"): NodeListOf<HTMLTableCaptionElement>;
getElementsByTagName(name: "center"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "cite"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "code"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "col"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "colgroup"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "datalist"): NodeListOf<HTMLDataListElement>;
getElementsByTagName(name: "dd"): NodeListOf<HTMLDDElement>;
getElementsByTagName(name: "del"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "dfn"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "dir"): NodeListOf<HTMLDirectoryElement>;
getElementsByTagName(name: "div"): NodeListOf<HTMLDivElement>;
getElementsByTagName(name: "dl"): NodeListOf<HTMLDListElement>;
getElementsByTagName(name: "dt"): NodeListOf<HTMLDTElement>;
getElementsByTagName(name: "em"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "embed"): NodeListOf<HTMLEmbedElement>;
getElementsByTagName(name: "fieldset"): NodeListOf<HTMLFieldSetElement>;
getElementsByTagName(name: "figcaption"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "figure"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "font"): NodeListOf<HTMLFontElement>;
getElementsByTagName(name: "footer"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
getElementsByTagName(name: "frame"): NodeListOf<HTMLFrameElement>;
getElementsByTagName(name: "frameset"): NodeListOf<HTMLFrameSetElement>;
getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h2"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h3"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h4"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h5"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h6"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "head"): NodeListOf<HTMLHeadElement>;
getElementsByTagName(name: "header"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hgroup"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hr"): NodeListOf<HTMLHRElement>;
getElementsByTagName(name: "html"): NodeListOf<HTMLHtmlElement>;
getElementsByTagName(name: "i"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "iframe"): NodeListOf<HTMLIFrameElement>;
getElementsByTagName(name: "img"): NodeListOf<HTMLImageElement>;
getElementsByTagName(name: "input"): NodeListOf<HTMLInputElement>;
getElementsByTagName(name: "ins"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "isindex"): NodeListOf<HTMLIsIndexElement>;
getElementsByTagName(name: "kbd"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "keygen"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "label"): NodeListOf<HTMLLabelElement>;
getElementsByTagName(name: "legend"): NodeListOf<HTMLLegendElement>;
getElementsByTagName(name: "li"): NodeListOf<HTMLLIElement>;
getElementsByTagName(name: "link"): NodeListOf<HTMLLinkElement>;
getElementsByTagName(name: "listing"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "map"): NodeListOf<HTMLMapElement>;
getElementsByTagName(name: "mark"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "marquee"): NodeListOf<HTMLMarqueeElement>;
getElementsByTagName(name: "menu"): NodeListOf<HTMLMenuElement>;
getElementsByTagName(name: "meta"): NodeListOf<HTMLMetaElement>;
getElementsByTagName(name: "nav"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "nextid"): NodeListOf<HTMLNextIdElement>;
getElementsByTagName(name: "nobr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "noframes"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "noscript"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "object"): NodeListOf<HTMLObjectElement>;
getElementsByTagName(name: "ol"): NodeListOf<HTMLOListElement>;
getElementsByTagName(name: "optgroup"): NodeListOf<HTMLOptGroupElement>;
getElementsByTagName(name: "option"): NodeListOf<HTMLOptionElement>;
getElementsByTagName(name: "p"): NodeListOf<HTMLParagraphElement>;
getElementsByTagName(name: "param"): NodeListOf<HTMLParamElement>;
getElementsByTagName(name: "plaintext"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "pre"): NodeListOf<HTMLPreElement>;
getElementsByTagName(name: "progress"): NodeListOf<HTMLProgressElement>;
getElementsByTagName(name: "q"): NodeListOf<HTMLQuoteElement>;
getElementsByTagName(name: "rt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ruby"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "s"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "samp"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "script"): NodeListOf<HTMLScriptElement>;
getElementsByTagName(name: "section"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "select"): NodeListOf<HTMLSelectElement>;
getElementsByTagName(name: "small"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "SOURCE"): NodeListOf<HTMLSourceElement>;
getElementsByTagName(name: "span"): NodeListOf<HTMLSpanElement>;
getElementsByTagName(name: "strike"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "strong"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "style"): NodeListOf<HTMLStyleElement>;
getElementsByTagName(name: "sub"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "sup"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "table"): NodeListOf<HTMLTableElement>;
getElementsByTagName(name: "tbody"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "td"): NodeListOf<HTMLTableDataCellElement>;
getElementsByTagName(name: "textarea"): NodeListOf<HTMLTextAreaElement>;
getElementsByTagName(name: "tfoot"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "th"): NodeListOf<HTMLTableHeaderCellElement>;
getElementsByTagName(name: "thead"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "title"): NodeListOf<HTMLTitleElement>;
getElementsByTagName(name: "tr"): NodeListOf<HTMLTableRowElement>;
getElementsByTagName(name: "track"): NodeListOf<HTMLTrackElement>;
getElementsByTagName(name: "tt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "u"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ul"): NodeListOf<HTMLUListElement>;
getElementsByTagName(name: "var"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "video"): NodeListOf<HTMLVideoElement>;
getElementsByTagName(name: "wbr"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
getElementsByTagName(name: "xmp"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: string): NodeList;
getClientRects(): ClientRectList;
setAttributeNode(newAttr: Attr): Attr;
removeAttributeNode(oldAttr: Attr): Attr;
setAttribute(name?: string, value?: string): void;
removeAttributeNS(namespaceURI: string, localName: string): void;
msGetRegionContent(): MSRangeCollection;
msReleasePointerCapture(pointerId: number): void;
msSetPointerCapture(pointerId: number): void;
msZoomTo(args: MsZoomToOptions): void;
setPointerCapture(pointerId: number): void;
msGetUntransformedBounds(): ClientRect;
releasePointerCapture(pointerId: number): void;
msRequestFullscreen(): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Element: {
prototype: Element;
new(): Element;
}
interface HTMLNextIdElement extends HTMLElement {
n: string;
}
declare var HTMLNextIdElement: {
prototype: HTMLNextIdElement;
new(): HTMLNextIdElement;
}
interface SVGPathSegMovetoRel extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegMovetoRel: {
prototype: SVGPathSegMovetoRel;
new(): SVGPathSegMovetoRel;
}
interface SVGLineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
y1: SVGAnimatedLength;
x2: SVGAnimatedLength;
x1: SVGAnimatedLength;
y2: SVGAnimatedLength;
}
declare var SVGLineElement: {
prototype: SVGLineElement;
new(): SVGLineElement;
}
interface HTMLParagraphElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
}
declare var HTMLParagraphElement: {
prototype: HTMLParagraphElement;
new(): HTMLParagraphElement;
}
interface HTMLAreasCollection extends HTMLCollection {
/**
* Removes an element from the collection.
*/
remove(index?: number): void;
/**
* Adds an element to the areas, controlRange, or options collection.
*/
add(element: HTMLElement, before?: any): void;
}
declare var HTMLAreasCollection: {
prototype: HTMLAreasCollection;
new(): HTMLAreasCollection;
}
interface SVGDescElement extends SVGElement, SVGStylable, SVGLangSpace {
}
declare var SVGDescElement: {
prototype: SVGDescElement;
new(): SVGDescElement;
}
interface Node extends EventTarget {
nodeType: number;
previousSibling: Node;
localName: string;
namespaceURI: string;
textContent: string;
parentNode: Node;
nextSibling: Node;
nodeValue: string;
lastChild: Node;
childNodes: NodeList;
nodeName: string;
ownerDocument: Document;
attributes: NamedNodeMap;
firstChild: Node;
prefix: string;
removeChild(oldChild: Node): Node;
appendChild(newChild: Node): Node;
isSupported(feature: string, version: string): boolean;
isEqualNode(arg: Node): boolean;
lookupPrefix(namespaceURI: string): string;
isDefaultNamespace(namespaceURI: string): boolean;
compareDocumentPosition(other: Node): number;
normalize(): void;
isSameNode(other: Node): boolean;
hasAttributes(): boolean;
lookupNamespaceURI(prefix: string): string;
cloneNode(deep?: boolean): Node;
hasChildNodes(): boolean;
replaceChild(newChild: Node, oldChild: Node): Node;
insertBefore(newChild: Node, refChild?: Node): Node;
ENTITY_REFERENCE_NODE: number;
ATTRIBUTE_NODE: number;
DOCUMENT_FRAGMENT_NODE: number;
TEXT_NODE: number;
ELEMENT_NODE: number;
COMMENT_NODE: number;
DOCUMENT_POSITION_DISCONNECTED: number;
DOCUMENT_POSITION_CONTAINED_BY: number;
DOCUMENT_POSITION_CONTAINS: number;
DOCUMENT_TYPE_NODE: number;
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
DOCUMENT_NODE: number;
ENTITY_NODE: number;
PROCESSING_INSTRUCTION_NODE: number;
CDATA_SECTION_NODE: number;
NOTATION_NODE: number;
DOCUMENT_POSITION_FOLLOWING: number;
DOCUMENT_POSITION_PRECEDING: number;
}
declare var Node: {
prototype: Node;
new(): Node;
ENTITY_REFERENCE_NODE: number;
ATTRIBUTE_NODE: number;
DOCUMENT_FRAGMENT_NODE: number;
TEXT_NODE: number;
ELEMENT_NODE: number;
COMMENT_NODE: number;
DOCUMENT_POSITION_DISCONNECTED: number;
DOCUMENT_POSITION_CONTAINED_BY: number;
DOCUMENT_POSITION_CONTAINS: number;
DOCUMENT_TYPE_NODE: number;
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
DOCUMENT_NODE: number;
ENTITY_NODE: number;
PROCESSING_INSTRUCTION_NODE: number;
CDATA_SECTION_NODE: number;
NOTATION_NODE: number;
DOCUMENT_POSITION_FOLLOWING: number;
DOCUMENT_POSITION_PRECEDING: number;
}
interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegCurvetoQuadraticSmoothRel: {
prototype: SVGPathSegCurvetoQuadraticSmoothRel;
new(): SVGPathSegCurvetoQuadraticSmoothRel;
}
interface DOML2DeprecatedListSpaceReduction {
compact: boolean;
}
interface MSScriptHost {
}
declare var MSScriptHost: {
prototype: MSScriptHost;
new(): MSScriptHost;
}
interface SVGClipPathElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
clipPathUnits: SVGAnimatedEnumeration;
}
declare var SVGClipPathElement: {
prototype: SVGClipPathElement;
new(): SVGClipPathElement;
}
interface MouseEvent extends UIEvent {
toElement: Element;
layerY: number;
fromElement: Element;
which: number;
pageX: number;
offsetY: number;
x: number;
y: number;
metaKey: boolean;
altKey: boolean;
ctrlKey: boolean;
offsetX: number;
screenX: number;
clientY: number;
shiftKey: boolean;
layerX: number;
screenY: number;
relatedTarget: EventTarget;
button: number;
pageY: number;
buttons: number;
clientX: number;
initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget): void;
getModifierState(keyArg: string): boolean;
}
declare var MouseEvent: {
prototype: MouseEvent;
new(): MouseEvent;
}
interface RangeException {
code: number;
message: string;
name: string;
toString(): string;
INVALID_NODE_TYPE_ERR: number;
BAD_BOUNDARYPOINTS_ERR: number;
}
declare var RangeException: {
prototype: RangeException;
new(): RangeException;
INVALID_NODE_TYPE_ERR: number;
BAD_BOUNDARYPOINTS_ERR: number;
}
interface SVGTextPositioningElement extends SVGTextContentElement {
y: SVGAnimatedLengthList;
rotate: SVGAnimatedNumberList;
dy: SVGAnimatedLengthList;
x: SVGAnimatedLengthList;
dx: SVGAnimatedLengthList;
}
declare var SVGTextPositioningElement: {
prototype: SVGTextPositioningElement;
new(): SVGTextPositioningElement;
}
interface HTMLAppletElement extends HTMLElement, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions {
width: number;
/**
* Sets or retrieves the Internet media type for the code associated with the object.
*/
codeType: string;
object: string;
form: HTMLFormElement;
code: string;
/**
* Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
*/
archive: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves a message to be displayed while an object is loading.
*/
standby: string;
/**
* Sets or retrieves the class identifier for the object.
*/
classid: string;
/**
* Sets or retrieves the shape of the object.
*/
name: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* Sets or retrieves the URL that references the data of the object.
*/
data: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Gets or sets the optional alternative HTML script to execute if the object fails to load.
*/
altHtml: string;
/**
* Address of a pointer to the document this page or frame contains. If there is no document, then null will be returned.
*/
contentDocument: Document;
/**
* Sets or retrieves the URL of the component.
*/
codeBase: string;
/**
* Sets or retrieves a character string that can be used to implement your own declare functionality for the object.
*/
declare: boolean;
/**
* Returns the content type of the object.
*/
type: string;
/**
* Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
*/
BaseHref: string;
}
declare var HTMLAppletElement: {
prototype: HTMLAppletElement;
new(): HTMLAppletElement;
}
interface TextMetrics {
width: number;
}
declare var TextMetrics: {
prototype: TextMetrics;
new(): TextMetrics;
}
interface DocumentEvent {
createEvent(eventInterface: "AnimationEvent"): AnimationEvent;
createEvent(eventInterface: "CloseEvent"): CloseEvent;
createEvent(eventInterface: "CompositionEvent"): CompositionEvent;
createEvent(eventInterface: "CustomEvent"): CustomEvent;
createEvent(eventInterface: "DeviceMotionEvent"): DeviceMotionEvent;
createEvent(eventInterface: "DeviceOrientationEvent"): DeviceOrientationEvent;
createEvent(eventInterface: "DragEvent"): DragEvent;
createEvent(eventInterface: "ErrorEvent"): ErrorEvent;
createEvent(eventInterface: "Event"): Event;
createEvent(eventInterface: "Events"): Event;
createEvent(eventInterface: "FocusEvent"): FocusEvent;
createEvent(eventInterface: "HTMLEvents"): Event;
createEvent(eventInterface: "IDBVersionChangeEvent"): IDBVersionChangeEvent;
createEvent(eventInterface: "KeyboardEvent"): KeyboardEvent;
createEvent(eventInterface: "LongRunningScriptDetectedEvent"): LongRunningScriptDetectedEvent;
createEvent(eventInterface: "MessageEvent"): MessageEvent;
createEvent(eventInterface: "MouseEvent"): MouseEvent;
createEvent(eventInterface: "MouseEvents"): MouseEvent;
createEvent(eventInterface: "MouseWheelEvent"): MouseWheelEvent;
createEvent(eventInterface: "MSGestureEvent"): MSGestureEvent;
createEvent(eventInterface: "MSPointerEvent"): MSPointerEvent;
createEvent(eventInterface: "MutationEvent"): MutationEvent;
createEvent(eventInterface: "MutationEvents"): MutationEvent;
createEvent(eventInterface: "NavigationCompletedEvent"): NavigationCompletedEvent;
createEvent(eventInterface: "NavigationEvent"): NavigationEvent;
createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent;
createEvent(eventInterface: "PointerEvent"): MSPointerEvent;
createEvent(eventInterface: "PopStateEvent"): PopStateEvent;
createEvent(eventInterface: "ProgressEvent"): ProgressEvent;
createEvent(eventInterface: "StorageEvent"): StorageEvent;
createEvent(eventInterface: "SVGZoomEvents"): SVGZoomEvent;
createEvent(eventInterface: "TextEvent"): TextEvent;
createEvent(eventInterface: "TrackEvent"): TrackEvent;
createEvent(eventInterface: "TransitionEvent"): TransitionEvent;
createEvent(eventInterface: "UIEvent"): UIEvent;
createEvent(eventInterface: "UIEvents"): UIEvent;
createEvent(eventInterface: "UnviewableContentIdentifiedEvent"): UnviewableContentIdentifiedEvent;
createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent;
createEvent(eventInterface: "WheelEvent"): WheelEvent;
createEvent(eventInterface: string): Event;
}
interface HTMLOListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle {
/**
* The starting number.
*/
start: number;
}
declare var HTMLOListElement: {
prototype: HTMLOListElement;
new(): HTMLOListElement;
}
interface SVGPathSegLinetoVerticalRel extends SVGPathSeg {
y: number;
}
declare var SVGPathSegLinetoVerticalRel: {
prototype: SVGPathSegLinetoVerticalRel;
new(): SVGPathSegLinetoVerticalRel;
}
interface SVGAnimatedString {
animVal: string;
baseVal: string;
}
declare var SVGAnimatedString: {
prototype: SVGAnimatedString;
new(): SVGAnimatedString;
}
interface CDATASection extends Text {
}
declare var CDATASection: {
prototype: CDATASection;
new(): CDATASection;
}
interface StyleMedia {
type: string;
matchMedium(mediaquery: string): boolean;
}
declare var StyleMedia: {
prototype: StyleMedia;
new(): StyleMedia;
}
interface HTMLSelectElement extends HTMLElement, MSHTMLCollectionExtensions, MSDataBindingExtensions {
options: HTMLSelectElement;
/**
* Sets or retrieves the value which is returned to the server when the form control is submitted.
*/
value: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the number of rows in the list box.
*/
size: number;
/**
* Sets or retrieves the number of objects in a collection.
*/
length: number;
/**
* Sets or retrieves the index of the selected option in a select object.
*/
selectedIndex: number;
/**
* Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
*/
multiple: boolean;
/**
* Retrieves the type of select control based on the value of the MULTIPLE attribute.
*/
type: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* When present, marks an element that can't be submitted without a value.
*/
required: boolean;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Removes an element from the collection.
* @param index Number that specifies the zero-based index of the element to remove from the collection.
*/
remove(index?: number): void;
/**
* Adds an element to the areas, controlRange, or options collection.
* @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection.
* @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection.
*/
add(element: HTMLElement, before?: any): void;
/**
* Retrieves a select object or an object from an options collection.
* @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
* @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
*/
item(name?: any, index?: any): any;
/**
* Retrieves a select object or an object from an options collection.
* @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made.
*/
namedItem(name: string): any;
[name: string]: any;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLSelectElement: {
prototype: HTMLSelectElement;
new(): HTMLSelectElement;
}
interface TextRange {
boundingLeft: number;
htmlText: string;
offsetLeft: number;
boundingWidth: number;
boundingHeight: number;
boundingTop: number;
text: string;
offsetTop: number;
moveToPoint(x: number, y: number): void;
queryCommandValue(cmdID: string): any;
getBookmark(): string;
move(unit: string, count?: number): number;
queryCommandIndeterm(cmdID: string): boolean;
scrollIntoView(fStart?: boolean): void;
findText(string: string, count?: number, flags?: number): boolean;
execCommand(cmdID: string, showUI?: boolean, value?: any): boolean;
getBoundingClientRect(): ClientRect;
moveToBookmark(bookmark: string): boolean;
isEqual(range: TextRange): boolean;
duplicate(): TextRange;
collapse(start?: boolean): void;
queryCommandText(cmdID: string): string;
select(): void;
pasteHTML(html: string): void;
inRange(range: TextRange): boolean;
moveEnd(unit: string, count?: number): number;
getClientRects(): ClientRectList;
moveStart(unit: string, count?: number): number;
parentElement(): Element;
queryCommandState(cmdID: string): boolean;
compareEndPoints(how: string, sourceRange: TextRange): number;
execCommandShowHelp(cmdID: string): boolean;
moveToElementText(element: Element): void;
expand(Unit: string): boolean;
queryCommandSupported(cmdID: string): boolean;
setEndPoint(how: string, SourceRange: TextRange): void;
queryCommandEnabled(cmdID: string): boolean;
}
declare var TextRange: {
prototype: TextRange;
new(): TextRange;
}
interface SVGTests {
requiredFeatures: SVGStringList;
requiredExtensions: SVGStringList;
systemLanguage: SVGStringList;
hasExtension(extension: string): boolean;
}
interface HTMLBlockElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLBlockElement: {
prototype: HTMLBlockElement;
new(): HTMLBlockElement;
}
interface CSSStyleSheet extends StyleSheet {
owningElement: Element;
imports: StyleSheetList;
isAlternate: boolean;
rules: MSCSSRuleList;
isPrefAlternate: boolean;
readOnly: boolean;
cssText: string;
ownerRule: CSSRule;
href: string;
cssRules: CSSRuleList;
id: string;
pages: StyleSheetPageList;
addImport(bstrURL: string, lIndex?: number): number;
addPageRule(bstrSelector: string, bstrStyle: string, lIndex?: number): number;
insertRule(rule: string, index?: number): number;
removeRule(lIndex: number): void;
deleteRule(index?: number): void;
addRule(bstrSelector: string, bstrStyle?: string, lIndex?: number): number;
removeImport(lIndex: number): void;
}
declare var CSSStyleSheet: {
prototype: CSSStyleSheet;
new(): CSSStyleSheet;
}
interface MSSelection {
type: string;
typeDetail: string;
createRange(): TextRange;
clear(): void;
createRangeCollection(): TextRangeCollection;
empty(): void;
}
declare var MSSelection: {
prototype: MSSelection;
new(): MSSelection;
}
interface HTMLMetaElement extends HTMLElement {
/**
* Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header.
*/
httpEquiv: string;
/**
* Sets or retrieves the value specified in the content attribute of the meta object.
*/
name: string;
/**
* Gets or sets meta-information to associate with httpEquiv or name.
*/
content: string;
/**
* Sets or retrieves the URL property that will be loaded after the specified time has elapsed.
*/
url: string;
/**
* Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object.
*/
scheme: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
}
declare var HTMLMetaElement: {
prototype: HTMLMetaElement;
new(): HTMLMetaElement;
}
interface SVGPatternElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired, SVGURIReference {
patternUnits: SVGAnimatedEnumeration;
y: SVGAnimatedLength;
width: SVGAnimatedLength;
x: SVGAnimatedLength;
patternContentUnits: SVGAnimatedEnumeration;
patternTransform: SVGAnimatedTransformList;
height: SVGAnimatedLength;
}
declare var SVGPatternElement: {
prototype: SVGPatternElement;
new(): SVGPatternElement;
}
interface SVGAnimatedAngle {
animVal: SVGAngle;
baseVal: SVGAngle;
}
declare var SVGAnimatedAngle: {
prototype: SVGAnimatedAngle;
new(): SVGAnimatedAngle;
}
interface Selection {
isCollapsed: boolean;
anchorNode: Node;
focusNode: Node;
anchorOffset: number;
focusOffset: number;
rangeCount: number;
addRange(range: Range): void;
collapseToEnd(): void;
toString(): string;
selectAllChildren(parentNode: Node): void;
getRangeAt(index: number): Range;
collapse(parentNode: Node, offset: number): void;
removeAllRanges(): void;
collapseToStart(): void;
deleteFromDocument(): void;
removeRange(range: Range): void;
}
declare var Selection: {
prototype: Selection;
new(): Selection;
}
interface SVGScriptElement extends SVGElement, SVGExternalResourcesRequired, SVGURIReference {
type: string;
}
declare var SVGScriptElement: {
prototype: SVGScriptElement;
new(): SVGScriptElement;
}
interface HTMLDDElement extends HTMLElement {
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
}
declare var HTMLDDElement: {
prototype: HTMLDDElement;
new(): HTMLDDElement;
}
interface MSDataBindingRecordSetReadonlyExtensions {
recordset: any;
namedRecordset(dataMember: string, hierarchy?: any): any;
}
interface CSSStyleRule extends CSSRule {
selectorText: string;
style: MSStyleCSSProperties;
readOnly: boolean;
}
declare var CSSStyleRule: {
prototype: CSSStyleRule;
new(): CSSStyleRule;
}
interface NodeIterator {
whatToShow: number;
filter: NodeFilter;
root: Node;
expandEntityReferences: boolean;
nextNode(): Node;
detach(): void;
previousNode(): Node;
}
declare var NodeIterator: {
prototype: NodeIterator;
new(): NodeIterator;
}
interface SVGViewElement extends SVGElement, SVGZoomAndPan, SVGFitToViewBox, SVGExternalResourcesRequired {
viewTarget: SVGStringList;
}
declare var SVGViewElement: {
prototype: SVGViewElement;
new(): SVGViewElement;
}
interface HTMLLinkElement extends HTMLElement, LinkStyle {
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rel: string;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Sets or retrieves a destination URL or an anchor point.
*/
href: string;
/**
* Sets or retrieves the media type.
*/
media: string;
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rev: string;
/**
* Sets or retrieves the MIME type of the object.
*/
type: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
/**
* Sets or retrieves the language code of the object.
*/
hreflang: string;
}
declare var HTMLLinkElement: {
prototype: HTMLLinkElement;
new(): HTMLLinkElement;
}
interface SVGLocatable {
farthestViewportElement: SVGElement;
nearestViewportElement: SVGElement;
getBBox(): SVGRect;
getTransformToElement(element: SVGElement): SVGMatrix;
getCTM(): SVGMatrix;
getScreenCTM(): SVGMatrix;
}
interface HTMLFontElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
/**
* Sets or retrieves the current typeface family.
*/
face: string;
}
declare var HTMLFontElement: {
prototype: HTMLFontElement;
new(): HTMLFontElement;
}
interface SVGTitleElement extends SVGElement, SVGStylable, SVGLangSpace {
}
declare var SVGTitleElement: {
prototype: SVGTitleElement;
new(): SVGTitleElement;
}
interface ControlRangeCollection {
length: number;
queryCommandValue(cmdID: string): any;
remove(index: number): void;
add(item: Element): void;
queryCommandIndeterm(cmdID: string): boolean;
scrollIntoView(varargStart?: any): void;
item(index: number): Element;
[index: number]: Element;
execCommand(cmdID: string, showUI?: boolean, value?: any): boolean;
addElement(item: Element): void;
queryCommandState(cmdID: string): boolean;
queryCommandSupported(cmdID: string): boolean;
queryCommandEnabled(cmdID: string): boolean;
queryCommandText(cmdID: string): string;
select(): void;
}
declare var ControlRangeCollection: {
prototype: ControlRangeCollection;
new(): ControlRangeCollection;
}
interface MSNamespaceInfo extends MSEventAttachmentTarget {
urn: string;
onreadystatechange: (ev: Event) => any;
name: string;
readyState: string;
doImport(implementationUrl: string): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MSNamespaceInfo: {
prototype: MSNamespaceInfo;
new(): MSNamespaceInfo;
}
interface WindowSessionStorage {
sessionStorage: Storage;
}
interface SVGAnimatedTransformList {
animVal: SVGTransformList;
baseVal: SVGTransformList;
}
declare var SVGAnimatedTransformList: {
prototype: SVGAnimatedTransformList;
new(): SVGAnimatedTransformList;
}
interface HTMLTableCaptionElement extends HTMLElement {
/**
* Sets or retrieves the alignment of the caption or legend.
*/
align: string;
/**
* Sets or retrieves whether the caption appears at the top or bottom of the table.
*/
vAlign: string;
}
declare var HTMLTableCaptionElement: {
prototype: HTMLTableCaptionElement;
new(): HTMLTableCaptionElement;
}
interface HTMLOptionElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the ordinal position of an option in a list box.
*/
index: number;
/**
* Sets or retrieves the status of an option.
*/
defaultSelected: boolean;
/**
* Sets or retrieves the value which is returned to the server when the form control is submitted.
*/
value: string;
/**
* Sets or retrieves the text string specified by the option tag.
*/
text: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves a value that you can use to implement your own label functionality for the object.
*/
label: string;
/**
* Sets or retrieves whether the option in the list box is the default item.
*/
selected: boolean;
}
declare var HTMLOptionElement: {
prototype: HTMLOptionElement;
new(): HTMLOptionElement;
create(): HTMLOptionElement;
}
interface HTMLMapElement extends HTMLElement {
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Retrieves a collection of the area objects defined for the given map object.
*/
areas: HTMLAreasCollection;
}
declare var HTMLMapElement: {
prototype: HTMLMapElement;
new(): HTMLMapElement;
}
interface HTMLMenuElement extends HTMLElement, DOML2DeprecatedListSpaceReduction {
type: string;
}
declare var HTMLMenuElement: {
prototype: HTMLMenuElement;
new(): HTMLMenuElement;
}
interface MouseWheelEvent extends MouseEvent {
wheelDelta: number;
initMouseWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, wheelDeltaArg: number): void;
}
declare var MouseWheelEvent: {
prototype: MouseWheelEvent;
new(): MouseWheelEvent;
}
interface SVGFitToViewBox {
viewBox: SVGAnimatedRect;
preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
}
interface SVGPointList {
numberOfItems: number;
replaceItem(newItem: SVGPoint, index: number): SVGPoint;
getItem(index: number): SVGPoint;
clear(): void;
appendItem(newItem: SVGPoint): SVGPoint;
initialize(newItem: SVGPoint): SVGPoint;
removeItem(index: number): SVGPoint;
insertItemBefore(newItem: SVGPoint, index: number): SVGPoint;
}
declare var SVGPointList: {
prototype: SVGPointList;
new(): SVGPointList;
}
interface SVGAnimatedLengthList {
animVal: SVGLengthList;
baseVal: SVGLengthList;
}
declare var SVGAnimatedLengthList: {
prototype: SVGAnimatedLengthList;
new(): SVGAnimatedLengthList;
}
interface SVGAnimatedPreserveAspectRatio {
animVal: SVGPreserveAspectRatio;
baseVal: SVGPreserveAspectRatio;
}
declare var SVGAnimatedPreserveAspectRatio: {
prototype: SVGAnimatedPreserveAspectRatio;
new(): SVGAnimatedPreserveAspectRatio;
}
interface MSSiteModeEvent extends Event {
buttonID: number;
actionURL: string;
}
declare var MSSiteModeEvent: {
prototype: MSSiteModeEvent;
new(): MSSiteModeEvent;
}
interface DOML2DeprecatedTextFlowControl {
clear: string;
}
interface StyleSheetPageList {
length: number;
item(index: number): CSSPageRule;
[index: number]: CSSPageRule;
}
declare var StyleSheetPageList: {
prototype: StyleSheetPageList;
new(): StyleSheetPageList;
}
interface MSCSSProperties extends CSSStyleDeclaration {
scrollbarShadowColor: string;
scrollbarHighlightColor: string;
layoutGridChar: string;
layoutGridType: string;
textAutospace: string;
textKashidaSpace: string;
writingMode: string;
scrollbarFaceColor: string;
backgroundPositionY: string;
lineBreak: string;
imeMode: string;
msBlockProgression: string;
layoutGridLine: string;
scrollbarBaseColor: string;
layoutGrid: string;
layoutFlow: string;
textKashida: string;
filter: string;
zoom: string;
scrollbarArrowColor: string;
behavior: string;
backgroundPositionX: string;
accelerator: string;
layoutGridMode: string;
textJustifyTrim: string;
scrollbar3dLightColor: string;
msInterpolationMode: string;
scrollbarTrackColor: string;
scrollbarDarkShadowColor: string;
styleFloat: string;
getAttribute(attributeName: string, flags?: number): any;
setAttribute(attributeName: string, AttributeValue: any, flags?: number): void;
removeAttribute(attributeName: string, flags?: number): boolean;
}
declare var MSCSSProperties: {
prototype: MSCSSProperties;
new(): MSCSSProperties;
}
interface SVGExternalResourcesRequired {
externalResourcesRequired: SVGAnimatedBoolean;
}
interface HTMLImageElement extends HTMLElement, MSImageResourceExtensions, MSDataBindingExtensions, MSResourceMetadata {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves the vertical margin for the object.
*/
vspace: number;
/**
* The original height of the image resource before sizing.
*/
naturalHeight: number;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* The original width of the image resource before sizing.
*/
naturalWidth: number;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the height of the object.
*/
height: number;
/**
* Specifies the properties of a border drawn around an object.
*/
border: string;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
hspace: number;
/**
* Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object.
*/
longDesc: string;
/**
* Contains the hypertext reference (HREF) of the URL.
*/
href: string;
/**
* Sets or retrieves whether the image is a server-side image map.
*/
isMap: boolean;
/**
* Retrieves whether the object is fully loaded.
*/
complete: boolean;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
crossOrigin: string;
msPlayToPreferredSourceUri: string;
}
declare var HTMLImageElement: {
prototype: HTMLImageElement;
new(): HTMLImageElement;
create(): HTMLImageElement;
}
interface HTMLAreaElement extends HTMLElement {
/**
* Sets or retrieves the protocol portion of a URL.
*/
protocol: string;
/**
* Sets or retrieves the substring of the href property that follows the question mark.
*/
search: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves the coordinates of the object.
*/
coords: string;
/**
* Sets or retrieves the host name part of the location or URL.
*/
hostname: string;
/**
* Sets or retrieves the port number associated with a URL.
*/
port: string;
/**
* Sets or retrieves the file name or path specified by the object.
*/
pathname: string;
/**
* Sets or retrieves the hostname and port number of the location or URL.
*/
host: string;
/**
* Sets or retrieves the subsection of the href property that follows the number sign (#).
*/
hash: string;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Sets or retrieves a destination URL or an anchor point.
*/
href: string;
/**
* Sets or gets whether clicks in this region cause action.
*/
noHref: boolean;
/**
* Sets or retrieves the shape of the object.
*/
shape: string;
/**
* Returns a string representation of an object.
*/
toString(): string;
}
declare var HTMLAreaElement: {
prototype: HTMLAreaElement;
new(): HTMLAreaElement;
}
interface EventTarget {
removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
dispatchEvent(evt: Event): boolean;
}
interface SVGAngle {
valueAsString: string;
valueInSpecifiedUnits: number;
value: number;
unitType: number;
newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
convertToSpecifiedUnits(unitType: number): void;
SVG_ANGLETYPE_RAD: number;
SVG_ANGLETYPE_UNKNOWN: number;
SVG_ANGLETYPE_UNSPECIFIED: number;
SVG_ANGLETYPE_DEG: number;
SVG_ANGLETYPE_GRAD: number;
}
declare var SVGAngle: {
prototype: SVGAngle;
new(): SVGAngle;
SVG_ANGLETYPE_RAD: number;
SVG_ANGLETYPE_UNKNOWN: number;
SVG_ANGLETYPE_UNSPECIFIED: number;
SVG_ANGLETYPE_DEG: number;
SVG_ANGLETYPE_GRAD: number;
}
interface HTMLButtonElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the default or selected value of the control.
*/
value: string;
status: any;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Gets the classification and default behavior of the button.
*/
type: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Overrides the target attribute on a form element.
*/
formTarget: string;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Overrides the action attribute (where the data on a form is sent) on the parent form element.
*/
formAction: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
*/
formNoValidate: string;
/**
* Used to override the encoding (formEnctype attribute) specified on the form element.
*/
formEnctype: string;
/**
* Overrides the submit method attribute previously specified on a form element.
*/
formMethod: string;
/**
* Creates a TextRange object for the element.
*/
createTextRange(): TextRange;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLButtonElement: {
prototype: HTMLButtonElement;
new(): HTMLButtonElement;
}
interface HTMLSourceElement extends HTMLElement {
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Gets or sets the intended media type of the media source.
*/
media: string;
/**
* Gets or sets the MIME type of a media resource.
*/
type: string;
msKeySystem: string;
}
declare var HTMLSourceElement: {
prototype: HTMLSourceElement;
new(): HTMLSourceElement;
}
interface CanvasGradient {
addColorStop(offset: number, color: string): void;
}
declare var CanvasGradient: {
prototype: CanvasGradient;
new(): CanvasGradient;
}
interface KeyboardEvent extends UIEvent {
location: number;
keyCode: number;
shiftKey: boolean;
which: number;
locale: string;
key: string;
altKey: boolean;
metaKey: boolean;
char: string;
ctrlKey: boolean;
repeat: boolean;
charCode: number;
getModifierState(keyArg: string): boolean;
initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void;
DOM_KEY_LOCATION_RIGHT: number;
DOM_KEY_LOCATION_STANDARD: number;
DOM_KEY_LOCATION_LEFT: number;
DOM_KEY_LOCATION_NUMPAD: number;
DOM_KEY_LOCATION_JOYSTICK: number;
DOM_KEY_LOCATION_MOBILE: number;
}
declare var KeyboardEvent: {
prototype: KeyboardEvent;
new(): KeyboardEvent;
DOM_KEY_LOCATION_RIGHT: number;
DOM_KEY_LOCATION_STANDARD: number;
DOM_KEY_LOCATION_LEFT: number;
DOM_KEY_LOCATION_NUMPAD: number;
DOM_KEY_LOCATION_JOYSTICK: number;
DOM_KEY_LOCATION_MOBILE: number;
}
interface MessageEvent extends Event {
source: Window;
origin: string;
data: any;
ports: any;
initMessageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, dataArg: any, originArg: string, lastEventIdArg: string, sourceArg: Window): void;
}
declare var MessageEvent: {
prototype: MessageEvent;
new(): MessageEvent;
}
interface SVGElement extends Element {
onmouseover: (ev: MouseEvent) => any;
viewportElement: SVGElement;
onmousemove: (ev: MouseEvent) => any;
onmouseout: (ev: MouseEvent) => any;
ondblclick: (ev: MouseEvent) => any;
onfocusout: (ev: FocusEvent) => any;
onfocusin: (ev: FocusEvent) => any;
xmlbase: string;
onmousedown: (ev: MouseEvent) => any;
onload: (ev: Event) => any;
onmouseup: (ev: MouseEvent) => any;
onclick: (ev: MouseEvent) => any;
ownerSVGElement: SVGSVGElement;
id: string;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var SVGElement: {
prototype: SVGElement;
new(): SVGElement;
}
interface HTMLScriptElement extends HTMLElement {
/**
* Sets or retrieves the status of the script.
*/
defer: boolean;
/**
* Retrieves or sets the text of the object as a string.
*/
text: string;
/**
* Retrieves the URL to an external file that contains the source code or data.
*/
src: string;
/**
* Sets or retrieves the object that is bound to the event script.
*/
htmlFor: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
/**
* Sets or retrieves the MIME type for the associated scripting engine.
*/
type: string;
/**
* Sets or retrieves the event for which the script is written.
*/
event: string;
async: boolean;
}
declare var HTMLScriptElement: {
prototype: HTMLScriptElement;
new(): HTMLScriptElement;
}
interface HTMLTableRowElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle {
/**
* Retrieves the position of the object in the rows collection for the table.
*/
rowIndex: number;
/**
* Retrieves a collection of all cells in the table row.
*/
cells: HTMLCollection;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorLight: any;
/**
* Retrieves the position of the object in the collection.
*/
sectionRowIndex: number;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorDark: any;
/**
* Removes the specified cell from the table row, as well as from the cells collection.
* @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted.
*/
deleteCell(index?: number): void;
/**
* Creates a new cell in the table row, and adds the cell to the cells collection.
* @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection.
*/
insertCell(index?: number): HTMLElement;
}
declare var HTMLTableRowElement: {
prototype: HTMLTableRowElement;
new(): HTMLTableRowElement;
}
interface CanvasRenderingContext2D {
miterLimit: number;
font: string;
globalCompositeOperation: string;
msFillRule: string;
lineCap: string;
msImageSmoothingEnabled: boolean;
lineDashOffset: number;
shadowColor: string;
lineJoin: string;
shadowOffsetX: number;
lineWidth: number;
canvas: HTMLCanvasElement;
strokeStyle: any;
globalAlpha: number;
shadowOffsetY: number;
fillStyle: any;
shadowBlur: number;
textAlign: string;
textBaseline: string;
restore(): void;
setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
save(): void;
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
measureText(text: string): TextMetrics;
isPointInPath(x: number, y: number, fillRule?: string): boolean;
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void;
rotate(angle: number): void;
fillText(text: string, x: number, y: number, maxWidth?: number): void;
translate(x: number, y: number): void;
scale(x: number, y: number): void;
createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
lineTo(x: number, y: number): void;
getLineDash(): number[];
fill(fillRule?: string): void;
createImageData(imageDataOrSw: any, sh?: number): ImageData;
createPattern(image: HTMLElement, repetition: string): CanvasPattern;
closePath(): void;
rect(x: number, y: number, w: number, h: number): void;
clip(fillRule?: string): void;
clearRect(x: number, y: number, w: number, h: number): void;
moveTo(x: number, y: number): void;
getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
fillRect(x: number, y: number, w: number, h: number): void;
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
drawImage(image: HTMLElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
stroke(): void;
strokeRect(x: number, y: number, w: number, h: number): void;
setLineDash(segments: number[]): void;
strokeText(text: string, x: number, y: number, maxWidth?: number): void;
beginPath(): void;
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
}
declare var CanvasRenderingContext2D: {
prototype: CanvasRenderingContext2D;
new(): CanvasRenderingContext2D;
}
interface MSCSSRuleList {
length: number;
item(index?: number): CSSStyleRule;
[index: number]: CSSStyleRule;
}
declare var MSCSSRuleList: {
prototype: MSCSSRuleList;
new(): MSCSSRuleList;
}
interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
x: number;
}
declare var SVGPathSegLinetoHorizontalAbs: {
prototype: SVGPathSegLinetoHorizontalAbs;
new(): SVGPathSegLinetoHorizontalAbs;
}
interface SVGPathSegArcAbs extends SVGPathSeg {
y: number;
sweepFlag: boolean;
r2: number;
x: number;
angle: number;
r1: number;
largeArcFlag: boolean;
}
declare var SVGPathSegArcAbs: {
prototype: SVGPathSegArcAbs;
new(): SVGPathSegArcAbs;
}
interface SVGTransformList {
numberOfItems: number;
getItem(index: number): SVGTransform;
consolidate(): SVGTransform;
clear(): void;
appendItem(newItem: SVGTransform): SVGTransform;
initialize(newItem: SVGTransform): SVGTransform;
removeItem(index: number): SVGTransform;
insertItemBefore(newItem: SVGTransform, index: number): SVGTransform;
replaceItem(newItem: SVGTransform, index: number): SVGTransform;
createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
}
declare var SVGTransformList: {
prototype: SVGTransformList;
new(): SVGTransformList;
}
interface HTMLHtmlElement extends HTMLElement {
/**
* Sets or retrieves the DTD version that governs the current document.
*/
version: string;
}
declare var HTMLHtmlElement: {
prototype: HTMLHtmlElement;
new(): HTMLHtmlElement;
}
interface SVGPathSegClosePath extends SVGPathSeg {
}
declare var SVGPathSegClosePath: {
prototype: SVGPathSegClosePath;
new(): SVGPathSegClosePath;
}
interface HTMLFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: any;
/**
* Sets or retrieves whether the frame can be scrolled.
*/
scrolling: string;
/**
* Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
*/
marginHeight: string;
/**
* Sets or retrieves the left and right margin widths before displaying the text in a frame.
*/
marginWidth: string;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the amount of additional space between the frames.
*/
frameSpacing: any;
/**
* Sets or retrieves whether to display a border for the frame.
*/
frameBorder: string;
/**
* Sets or retrieves whether the user can resize the frame.
*/
noResize: boolean;
/**
* Retrieves the object of the specified.
*/
contentWindow: Window;
/**
* Sets or retrieves a URL to be loaded by the object.
*/
src: string;
/**
* Sets or retrieves the frame name.
*/
name: string;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Retrieves the document object of the page or frame.
*/
contentDocument: Document;
/**
* Specifies the properties of a border drawn around an object.
*/
border: string;
/**
* Sets or retrieves a URI to a long description of the object.
*/
longDesc: string;
/**
* Raised when the object has been completely received from the server.
*/
onload: (ev: Event) => any;
/**
* Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
*/
security: any;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLFrameElement: {
prototype: HTMLFrameElement;
new(): HTMLFrameElement;
}
interface SVGAnimatedLength {
animVal: SVGLength;
baseVal: SVGLength;
}
declare var SVGAnimatedLength: {
prototype: SVGAnimatedLength;
new(): SVGAnimatedLength;
}
interface SVGAnimatedPoints {
points: SVGPointList;
animatedPoints: SVGPointList;
}
interface SVGDefsElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGDefsElement: {
prototype: SVGDefsElement;
new(): SVGDefsElement;
}
interface HTMLQuoteElement extends HTMLElement {
/**
* Sets or retrieves the date and time of a modification to the object.
*/
dateTime: string;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLQuoteElement: {
prototype: HTMLQuoteElement;
new(): HTMLQuoteElement;
}
interface CSSMediaRule extends CSSRule {
media: MediaList;
cssRules: CSSRuleList;
insertRule(rule: string, index?: number): number;
deleteRule(index?: number): void;
}
declare var CSSMediaRule: {
prototype: CSSMediaRule;
new(): CSSMediaRule;
}
interface WindowModal {
dialogArguments: any;
returnValue: any;
}
interface XMLHttpRequest extends EventTarget {
responseBody: any;
status: number;
readyState: number;
responseText: string;
responseXML: any;
ontimeout: (ev: Event) => any;
statusText: string;
onreadystatechange: (ev: Event) => any;
timeout: number;
onload: (ev: Event) => any;
response: any;
withCredentials: boolean;
onprogress: (ev: ProgressEvent) => any;
onabort: (ev: UIEvent) => any;
responseType: string;
onloadend: (ev: ProgressEvent) => any;
upload: XMLHttpRequestEventTarget;
onerror: (ev: ErrorEvent) => any;
onloadstart: (ev: Event) => any;
msCaching: string;
open(method: string, url: string, async?: boolean, user?: string, password?: string): void;
send(data?: any): void;
abort(): void;
getAllResponseHeaders(): string;
setRequestHeader(header: string, value: string): void;
getResponseHeader(header: string): string;
msCachingEnabled(): boolean;
overrideMimeType(mime: string): void;
LOADING: number;
DONE: number;
UNSENT: number;
OPENED: number;
HEADERS_RECEIVED: number;
addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var XMLHttpRequest: {
prototype: XMLHttpRequest;
new(): XMLHttpRequest;
LOADING: number;
DONE: number;
UNSENT: number;
OPENED: number;
HEADERS_RECEIVED: number;
create(): XMLHttpRequest;
}
interface HTMLTableHeaderCellElement extends HTMLTableCellElement {
/**
* Sets or retrieves the group of cells in a table to which the object's information applies.
*/
scope: string;
}
declare var HTMLTableHeaderCellElement: {
prototype: HTMLTableHeaderCellElement;
new(): HTMLTableHeaderCellElement;
}
interface HTMLDListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction {
}
declare var HTMLDListElement: {
prototype: HTMLDListElement;
new(): HTMLDListElement;
}
interface MSDataBindingExtensions {
dataSrc: string;
dataFormatAs: string;
dataFld: string;
}
interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
x: number;
}
declare var SVGPathSegLinetoHorizontalRel: {
prototype: SVGPathSegLinetoHorizontalRel;
new(): SVGPathSegLinetoHorizontalRel;
}
interface SVGEllipseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
ry: SVGAnimatedLength;
cx: SVGAnimatedLength;
rx: SVGAnimatedLength;
cy: SVGAnimatedLength;
}
declare var SVGEllipseElement: {
prototype: SVGEllipseElement;
new(): SVGEllipseElement;
}
interface SVGAElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference {
target: SVGAnimatedString;
}
declare var SVGAElement: {
prototype: SVGAElement;
new(): SVGAElement;
}
interface SVGStylable {
className: SVGAnimatedString;
style: CSSStyleDeclaration;
}
interface SVGTransformable extends SVGLocatable {
transform: SVGAnimatedTransformList;
}
interface HTMLFrameSetElement extends HTMLElement {
ononline: (ev: Event) => any;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the frame heights of the object.
*/
rows: string;
/**
* Sets or retrieves the frame widths of the object.
*/
cols: string;
/**
* Fires when the object loses the input focus.
*/
onblur: (ev: FocusEvent) => any;
/**
* Sets or retrieves the amount of additional space between the frames.
*/
frameSpacing: any;
/**
* Fires when the object receives focus.
*/
onfocus: (ev: FocusEvent) => any;
onmessage: (ev: MessageEvent) => any;
onerror: (ev: ErrorEvent) => any;
/**
* Sets or retrieves whether to display a border for the frame.
*/
frameBorder: string;
onresize: (ev: UIEvent) => any;
name: string;
onafterprint: (ev: Event) => any;
onbeforeprint: (ev: Event) => any;
onoffline: (ev: Event) => any;
border: string;
onunload: (ev: Event) => any;
onhashchange: (ev: Event) => any;
onload: (ev: Event) => any;
onbeforeunload: (ev: BeforeUnloadEvent) => any;
onstorage: (ev: StorageEvent) => any;
onpageshow: (ev: PageTransitionEvent) => any;
onpagehide: (ev: PageTransitionEvent) => any;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLFrameSetElement: {
prototype: HTMLFrameSetElement;
new(): HTMLFrameSetElement;
}
interface Screen extends EventTarget {
width: number;
deviceXDPI: number;
fontSmoothingEnabled: boolean;
bufferDepth: number;
logicalXDPI: number;
systemXDPI: number;
availHeight: number;
height: number;
logicalYDPI: number;
systemYDPI: number;
updateInterval: number;
colorDepth: number;
availWidth: number;
deviceYDPI: number;
pixelDepth: number;
msOrientation: string;
onmsorientationchange: (ev: any) => any;
msLockOrientation(orientation: string): boolean;
msLockOrientation(orientations: string[]): boolean;
msUnlockOrientation(): void;
addEventListener(type: "msorientationchange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Screen: {
prototype: Screen;
new(): Screen;
}
interface Coordinates {
altitudeAccuracy: number;
longitude: number;
latitude: number;
speed: number;
heading: number;
altitude: number;
accuracy: number;
}
declare var Coordinates: {
prototype: Coordinates;
new(): Coordinates;
}
interface NavigatorGeolocation {
geolocation: Geolocation;
}
interface NavigatorContentUtils {
}
interface EventListener {
(evt: Event): void;
}
interface SVGLangSpace {
xmllang: string;
xmlspace: string;
}
interface DataTransfer {
effectAllowed: string;
dropEffect: string;
types: DOMStringList;
files: FileList;
clearData(format?: string): boolean;
setData(format: string, data: string): boolean;
getData(format: string): string;
}
declare var DataTransfer: {
prototype: DataTransfer;
new(): DataTransfer;
}
interface FocusEvent extends UIEvent {
relatedTarget: EventTarget;
initFocusEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, relatedTargetArg: EventTarget): void;
}
declare var FocusEvent: {
prototype: FocusEvent;
new(): FocusEvent;
}
interface Range {
startOffset: number;
collapsed: boolean;
endOffset: number;
startContainer: Node;
endContainer: Node;
commonAncestorContainer: Node;
setStart(refNode: Node, offset: number): void;
setEndBefore(refNode: Node): void;
setStartBefore(refNode: Node): void;
selectNode(refNode: Node): void;
detach(): void;
getBoundingClientRect(): ClientRect;
toString(): string;
compareBoundaryPoints(how: number, sourceRange: Range): number;
insertNode(newNode: Node): void;
collapse(toStart: boolean): void;
selectNodeContents(refNode: Node): void;
cloneContents(): DocumentFragment;
setEnd(refNode: Node, offset: number): void;
cloneRange(): Range;
getClientRects(): ClientRectList;
surroundContents(newParent: Node): void;
deleteContents(): void;
setStartAfter(refNode: Node): void;
extractContents(): DocumentFragment;
setEndAfter(refNode: Node): void;
createContextualFragment(fragment: string): DocumentFragment;
END_TO_END: number;
START_TO_START: number;
START_TO_END: number;
END_TO_START: number;
}
declare var Range: {
prototype: Range;
new(): Range;
END_TO_END: number;
START_TO_START: number;
START_TO_END: number;
END_TO_START: number;
}
interface SVGPoint {
y: number;
x: number;
matrixTransform(matrix: SVGMatrix): SVGPoint;
}
declare var SVGPoint: {
prototype: SVGPoint;
new(): SVGPoint;
}
interface MSPluginsCollection {
length: number;
refresh(reload?: boolean): void;
}
declare var MSPluginsCollection: {
prototype: MSPluginsCollection;
new(): MSPluginsCollection;
}
interface SVGAnimatedNumberList {
animVal: SVGNumberList;
baseVal: SVGNumberList;
}
declare var SVGAnimatedNumberList: {
prototype: SVGAnimatedNumberList;
new(): SVGAnimatedNumberList;
}
interface SVGSVGElement extends SVGElement, SVGStylable, SVGZoomAndPan, DocumentEvent, SVGLangSpace, SVGLocatable, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired {
width: SVGAnimatedLength;
x: SVGAnimatedLength;
contentStyleType: string;
onzoom: (ev: any) => any;
y: SVGAnimatedLength;
viewport: SVGRect;
onerror: (ev: ErrorEvent) => any;
pixelUnitToMillimeterY: number;
onresize: (ev: UIEvent) => any;
screenPixelToMillimeterY: number;
height: SVGAnimatedLength;
onabort: (ev: UIEvent) => any;
contentScriptType: string;
pixelUnitToMillimeterX: number;
currentTranslate: SVGPoint;
onunload: (ev: Event) => any;
currentScale: number;
onscroll: (ev: UIEvent) => any;
screenPixelToMillimeterX: number;
setCurrentTime(seconds: number): void;
createSVGLength(): SVGLength;
getIntersectionList(rect: SVGRect, referenceElement: SVGElement): NodeList;
unpauseAnimations(): void;
createSVGRect(): SVGRect;
checkIntersection(element: SVGElement, rect: SVGRect): boolean;
unsuspendRedrawAll(): void;
pauseAnimations(): void;
suspendRedraw(maxWaitMilliseconds: number): number;
deselectAll(): void;
createSVGAngle(): SVGAngle;
getEnclosureList(rect: SVGRect, referenceElement: SVGElement): NodeList;
createSVGTransform(): SVGTransform;
unsuspendRedraw(suspendHandleID: number): void;
forceRedraw(): void;
getCurrentTime(): number;
checkEnclosure(element: SVGElement, rect: SVGRect): boolean;
createSVGMatrix(): SVGMatrix;
createSVGPoint(): SVGPoint;
createSVGNumber(): SVGNumber;
createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
getElementById(elementId: string): Element;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "zoom", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var SVGSVGElement: {
prototype: SVGSVGElement;
new(): SVGSVGElement;
}
interface HTMLLabelElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the object to which the given label object is assigned.
*/
htmlFor: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
}
declare var HTMLLabelElement: {
prototype: HTMLLabelElement;
new(): HTMLLabelElement;
}
interface MSResourceMetadata {
protocol: string;
fileSize: string;
fileUpdatedDate: string;
nameProp: string;
fileCreatedDate: string;
fileModifiedDate: string;
mimeType: string;
}
interface HTMLLegendElement extends HTMLElement, MSDataBindingExtensions {
/**
* Retrieves a reference to the form that the object is embedded in.
*/
align: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
}
declare var HTMLLegendElement: {
prototype: HTMLLegendElement;
new(): HTMLLegendElement;
}
interface HTMLDirectoryElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle {
}
declare var HTMLDirectoryElement: {
prototype: HTMLDirectoryElement;
new(): HTMLDirectoryElement;
}
interface SVGAnimatedInteger {
animVal: number;
baseVal: number;
}
declare var SVGAnimatedInteger: {
prototype: SVGAnimatedInteger;
new(): SVGAnimatedInteger;
}
interface SVGTextElement extends SVGTextPositioningElement, SVGTransformable {
}
declare var SVGTextElement: {
prototype: SVGTextElement;
new(): SVGTextElement;
}
interface SVGTSpanElement extends SVGTextPositioningElement {
}
declare var SVGTSpanElement: {
prototype: SVGTSpanElement;
new(): SVGTSpanElement;
}
interface HTMLLIElement extends HTMLElement, DOML2DeprecatedListNumberingAndBulletStyle {
/**
* Sets or retrieves the value of a list item.
*/
value: number;
}
declare var HTMLLIElement: {
prototype: HTMLLIElement;
new(): HTMLLIElement;
}
interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
y: number;
}
declare var SVGPathSegLinetoVerticalAbs: {
prototype: SVGPathSegLinetoVerticalAbs;
new(): SVGPathSegLinetoVerticalAbs;
}
interface MSStorageExtensions {
remainingSpace: number;
}
interface SVGStyleElement extends SVGElement, SVGLangSpace {
media: string;
type: string;
title: string;
}
declare var SVGStyleElement: {
prototype: SVGStyleElement;
new(): SVGStyleElement;
}
interface MSCurrentStyleCSSProperties extends MSCSSProperties {
blockDirection: string;
clipBottom: string;
clipLeft: string;
clipRight: string;
clipTop: string;
hasLayout: string;
}
declare var MSCurrentStyleCSSProperties: {
prototype: MSCurrentStyleCSSProperties;
new(): MSCurrentStyleCSSProperties;
}
interface MSHTMLCollectionExtensions {
urns(urn: any): any;
tags(tagName: any): any;
}
interface Storage extends MSStorageExtensions {
length: number;
getItem(key: string): any;
[key: string]: any;
setItem(key: string, data: string): void;
clear(): void;
removeItem(key: string): void;
key(index: number): string;
[index: number]: string;
}
declare var Storage: {
prototype: Storage;
new(): Storage;
}
interface HTMLIFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Sets or retrieves whether the frame can be scrolled.
*/
scrolling: string;
/**
* Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
*/
marginHeight: string;
/**
* Sets or retrieves the left and right margin widths before displaying the text in a frame.
*/
marginWidth: string;
/**
* Sets or retrieves the amount of additional space between the frames.
*/
frameSpacing: any;
/**
* Sets or retrieves whether to display a border for the frame.
*/
frameBorder: string;
/**
* Sets or retrieves whether the user can resize the frame.
*/
noResize: boolean;
/**
* Sets or retrieves the vertical margin for the object.
*/
vspace: number;
/**
* Retrieves the object of the specified.
*/
contentWindow: Window;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves a URL to be loaded by the object.
*/
src: string;
/**
* Sets or retrieves the frame name.
*/
name: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Specifies the properties of a border drawn around an object.
*/
border: string;
/**
* Retrieves the document object of the page or frame.
*/
contentDocument: Document;
/**
* Sets or retrieves the horizontal margin for the object.
*/
hspace: number;
/**
* Sets or retrieves a URI to a long description of the object.
*/
longDesc: string;
/**
* Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
*/
security: any;
/**
* Raised when the object has been completely received from the server.
*/
onload: (ev: Event) => any;
sandbox: DOMSettableTokenList;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLIFrameElement: {
prototype: HTMLIFrameElement;
new(): HTMLIFrameElement;
}
interface TextRangeCollection {
length: number;
item(index: number): TextRange;
[index: number]: TextRange;
}
declare var TextRangeCollection: {
prototype: TextRangeCollection;
new(): TextRangeCollection;
}
interface HTMLBodyElement extends HTMLElement, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle {
scroll: string;
ononline: (ev: Event) => any;
onblur: (ev: FocusEvent) => any;
noWrap: boolean;
onfocus: (ev: FocusEvent) => any;
onmessage: (ev: MessageEvent) => any;
text: any;
onerror: (ev: ErrorEvent) => any;
bgProperties: string;
onresize: (ev: UIEvent) => any;
link: any;
aLink: any;
bottomMargin: any;
topMargin: any;
onafterprint: (ev: Event) => any;
vLink: any;
onbeforeprint: (ev: Event) => any;
onoffline: (ev: Event) => any;
onunload: (ev: Event) => any;
onhashchange: (ev: Event) => any;
onload: (ev: Event) => any;
rightMargin: any;
onbeforeunload: (ev: BeforeUnloadEvent) => any;
leftMargin: any;
onstorage: (ev: StorageEvent) => any;
onpopstate: (ev: PopStateEvent) => any;
onpageshow: (ev: PageTransitionEvent) => any;
onpagehide: (ev: PageTransitionEvent) => any;
createTextRange(): TextRange;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLBodyElement: {
prototype: HTMLBodyElement;
new(): HTMLBodyElement;
}
interface DocumentType extends Node {
name: string;
notations: NamedNodeMap;
systemId: string;
internalSubset: string;
entities: NamedNodeMap;
publicId: string;
}
declare var DocumentType: {
prototype: DocumentType;
new(): DocumentType;
}
interface SVGRadialGradientElement extends SVGGradientElement {
cx: SVGAnimatedLength;
r: SVGAnimatedLength;
cy: SVGAnimatedLength;
fx: SVGAnimatedLength;
fy: SVGAnimatedLength;
}
declare var SVGRadialGradientElement: {
prototype: SVGRadialGradientElement;
new(): SVGRadialGradientElement;
}
interface MutationEvent extends Event {
newValue: string;
attrChange: number;
attrName: string;
prevValue: string;
relatedNode: Node;
initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void;
MODIFICATION: number;
REMOVAL: number;
ADDITION: number;
}
declare var MutationEvent: {
prototype: MutationEvent;
new(): MutationEvent;
MODIFICATION: number;
REMOVAL: number;
ADDITION: number;
}
interface DragEvent extends MouseEvent {
dataTransfer: DataTransfer;
initDragEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, dataTransferArg: DataTransfer): void;
msConvertURL(file: File, targetType: string, targetURL?: string): void;
}
declare var DragEvent: {
prototype: DragEvent;
new(): DragEvent;
}
interface HTMLTableSectionElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle {
/**
* Sets or retrieves a value that indicates the table alignment.
*/
align: string;
/**
* Sets or retrieves the number of horizontal rows contained in the object.
*/
rows: HTMLCollection;
/**
* Removes the specified row (tr) from the element and from the rows collection.
* @param index Number that specifies the zero-based position in the rows collection of the row to remove.
*/
deleteRow(index?: number): void;
/**
* Moves a table row to a new position.
* @param indexFrom Number that specifies the index in the rows collection of the table row that is moved.
* @param indexTo Number that specifies where the row is moved within the rows collection.
*/
moveRow(indexFrom?: number, indexTo?: number): any;
/**
* Creates a new row (tr) in the table, and adds the row to the rows collection.
* @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
*/
insertRow(index?: number): HTMLElement;
}
declare var HTMLTableSectionElement: {
prototype: HTMLTableSectionElement;
new(): HTMLTableSectionElement;
}
interface DOML2DeprecatedListNumberingAndBulletStyle {
type: string;
}
interface HTMLInputElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: string;
status: boolean;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Gets or sets the starting position or offset of a text selection.
*/
selectionStart: number;
indeterminate: boolean;
readOnly: boolean;
size: number;
loop: number;
/**
* Gets or sets the end position or offset of a text selection.
*/
selectionEnd: number;
/**
* Sets or retrieves the URL of the virtual reality modeling language (VRML) world to be displayed in the window.
*/
vrml: string;
/**
* Sets or retrieves a lower resolution image to display.
*/
lowsrc: string;
/**
* Sets or retrieves the vertical margin for the object.
*/
vspace: number;
/**
* Sets or retrieves a comma-separated list of content types.
*/
accept: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves the state of the check box or radio button.
*/
defaultChecked: boolean;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Returns the value of the data at the cursor's current position.
*/
value: string;
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
border: string;
dynsrc: string;
/**
* Sets or retrieves the state of the check box or radio button.
*/
checked: boolean;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
hspace: number;
/**
* Sets or retrieves the maximum number of characters that the user can enter in a text control.
*/
maxLength: number;
/**
* Returns the content type of the object.
*/
type: string;
/**
* Sets or retrieves the initial contents of the object.
*/
defaultValue: string;
/**
* Retrieves whether the object is fully loaded.
*/
complete: boolean;
start: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Returns a FileList object on a file type input object.
*/
files: FileList;
/**
* Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field.
*/
max: string;
/**
* Overrides the target attribute on a form element.
*/
formTarget: string;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field.
*/
step: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* When present, marks an element that can't be submitted without a value.
*/
required: boolean;
/**
* Used to override the encoding (formEnctype attribute) specified on the form element.
*/
formEnctype: string;
/**
* Returns the input field value as a number.
*/
valueAsNumber: number;
/**
* Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
*/
placeholder: string;
/**
* Overrides the submit method attribute previously specified on a form element.
*/
formMethod: string;
/**
* Specifies the ID of a pre-defined datalist of options for an input element.
*/
list: HTMLElement;
/**
* Specifies whether autocomplete is applied to an editable text field.
*/
autocomplete: string;
/**
* Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field.
*/
min: string;
/**
* Overrides the action attribute (where the data on a form is sent) on the parent form element.
*/
formAction: string;
/**
* Gets or sets a string containing a regular expression that the user's input must match.
*/
pattern: string;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
*/
formNoValidate: string;
/**
* Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
*/
multiple: boolean;
/**
* Creates a TextRange object for the element.
*/
createTextRange(): TextRange;
/**
* Sets the start and end positions of a selection in a text field.
* @param start The offset into the text field for the start of the selection.
* @param end The offset into the text field for the end of the selection.
*/
setSelectionRange(start: number, end: number): void;
/**
* Makes the selection equal to the current object.
*/
select(): void;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value.
* @param n Value to decrement the value by.
*/
stepDown(n?: number): void;
/**
* Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value.
* @param n Value to increment the value by.
*/
stepUp(n?: number): void;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLInputElement: {
prototype: HTMLInputElement;
new(): HTMLInputElement;
}
interface HTMLAnchorElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rel: string;
/**
* Contains the protocol of the URL.
*/
protocol: string;
/**
* Sets or retrieves the substring of the href property that follows the question mark.
*/
search: string;
/**
* Sets or retrieves the coordinates of the object.
*/
coords: string;
/**
* Contains the hostname of a URL.
*/
hostname: string;
/**
* Contains the pathname of the URL.
*/
pathname: string;
Methods: string;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
protocolLong: string;
/**
* Sets or retrieves a destination URL or an anchor point.
*/
href: string;
/**
* Sets or retrieves the shape of the object.
*/
name: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
/**
* Sets or retrieves the language code of the object.
*/
hreflang: string;
/**
* Sets or retrieves the port number associated with a URL.
*/
port: string;
/**
* Contains the hostname and port values of the URL.
*/
host: string;
/**
* Contains the anchor portion of the URL including the hash sign (#).
*/
hash: string;
nameProp: string;
urn: string;
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rev: string;
/**
* Sets or retrieves the shape of the object.
*/
shape: string;
type: string;
mimeType: string;
/**
* Retrieves or sets the text of the object as a string.
*/
text: string;
/**
* Returns a string representation of an object.
*/
toString(): string;
}
declare var HTMLAnchorElement: {
prototype: HTMLAnchorElement;
new(): HTMLAnchorElement;
}
interface HTMLParamElement extends HTMLElement {
/**
* Sets or retrieves the value of an input parameter for an element.
*/
value: string;
/**
* Sets or retrieves the name of an input parameter for an element.
*/
name: string;
/**
* Sets or retrieves the content type of the resource designated by the value attribute.
*/
type: string;
/**
* Sets or retrieves the data type of the value attribute.
*/
valueType: string;
}
declare var HTMLParamElement: {
prototype: HTMLParamElement;
new(): HTMLParamElement;
}
interface SVGImageElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGImageElement: {
prototype: SVGImageElement;
new(): SVGImageElement;
}
interface SVGAnimatedNumber {
animVal: number;
baseVal: number;
}
declare var SVGAnimatedNumber: {
prototype: SVGAnimatedNumber;
new(): SVGAnimatedNumber;
}
interface PerformanceTiming {
redirectStart: number;
domainLookupEnd: number;
responseStart: number;
domComplete: number;
domainLookupStart: number;
loadEventStart: number;
msFirstPaint: number;
unloadEventEnd: number;
fetchStart: number;
requestStart: number;
domInteractive: number;
navigationStart: number;
connectEnd: number;
loadEventEnd: number;
connectStart: number;
responseEnd: number;
domLoading: number;
redirectEnd: number;
unloadEventStart: number;
domContentLoadedEventStart: number;
domContentLoadedEventEnd: number;
toJSON(): any;
}
declare var PerformanceTiming: {
prototype: PerformanceTiming;
new(): PerformanceTiming;
}
interface HTMLPreElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or gets a value that you can use to implement your own width functionality for the object.
*/
width: number;
/**
* Indicates a citation by rendering text in italic type.
*/
cite: string;
}
declare var HTMLPreElement: {
prototype: HTMLPreElement;
new(): HTMLPreElement;
}
interface EventException {
code: number;
message: string;
name: string;
toString(): string;
DISPATCH_REQUEST_ERR: number;
UNSPECIFIED_EVENT_TYPE_ERR: number;
}
declare var EventException: {
prototype: EventException;
new(): EventException;
DISPATCH_REQUEST_ERR: number;
UNSPECIFIED_EVENT_TYPE_ERR: number;
}
interface MSNavigatorDoNotTrack {
msDoNotTrack: string;
removeSiteSpecificTrackingException(args: ExceptionInformation): void;
removeWebWideTrackingException(args: ExceptionInformation): void;
storeWebWideTrackingException(args: StoreExceptionsInformation): void;
storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void;
confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean;
confirmWebWideTrackingException(args: ExceptionInformation): boolean;
}
interface NavigatorOnLine {
onLine: boolean;
}
interface WindowLocalStorage {
localStorage: Storage;
}
interface SVGMetadataElement extends SVGElement {
}
declare var SVGMetadataElement: {
prototype: SVGMetadataElement;
new(): SVGMetadataElement;
}
interface SVGPathSegArcRel extends SVGPathSeg {
y: number;
sweepFlag: boolean;
r2: number;
x: number;
angle: number;
r1: number;
largeArcFlag: boolean;
}
declare var SVGPathSegArcRel: {
prototype: SVGPathSegArcRel;
new(): SVGPathSegArcRel;
}
interface SVGPathSegMovetoAbs extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegMovetoAbs: {
prototype: SVGPathSegMovetoAbs;
new(): SVGPathSegMovetoAbs;
}
interface SVGStringList {
numberOfItems: number;
replaceItem(newItem: string, index: number): string;
getItem(index: number): string;
clear(): void;
appendItem(newItem: string): string;
initialize(newItem: string): string;
removeItem(index: number): string;
insertItemBefore(newItem: string, index: number): string;
}
declare var SVGStringList: {
prototype: SVGStringList;
new(): SVGStringList;
}
interface XDomainRequest {
timeout: number;
onerror: (ev: ErrorEvent) => any;
onload: (ev: Event) => any;
onprogress: (ev: ProgressEvent) => any;
ontimeout: (ev: Event) => any;
responseText: string;
contentType: string;
open(method: string, url: string): void;
abort(): void;
send(data?: any): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var XDomainRequest: {
prototype: XDomainRequest;
new(): XDomainRequest;
create(): XDomainRequest;
}
interface DOML2DeprecatedBackgroundColorStyle {
bgColor: any;
}
interface ElementTraversal {
childElementCount: number;
previousElementSibling: Element;
lastElementChild: Element;
nextElementSibling: Element;
firstElementChild: Element;
}
interface SVGLength {
valueAsString: string;
valueInSpecifiedUnits: number;
value: number;
unitType: number;
newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
convertToSpecifiedUnits(unitType: number): void;
SVG_LENGTHTYPE_NUMBER: number;
SVG_LENGTHTYPE_CM: number;
SVG_LENGTHTYPE_PC: number;
SVG_LENGTHTYPE_PERCENTAGE: number;
SVG_LENGTHTYPE_MM: number;
SVG_LENGTHTYPE_PT: number;
SVG_LENGTHTYPE_IN: number;
SVG_LENGTHTYPE_EMS: number;
SVG_LENGTHTYPE_PX: number;
SVG_LENGTHTYPE_UNKNOWN: number;
SVG_LENGTHTYPE_EXS: number;
}
declare var SVGLength: {
prototype: SVGLength;
new(): SVGLength;
SVG_LENGTHTYPE_NUMBER: number;
SVG_LENGTHTYPE_CM: number;
SVG_LENGTHTYPE_PC: number;
SVG_LENGTHTYPE_PERCENTAGE: number;
SVG_LENGTHTYPE_MM: number;
SVG_LENGTHTYPE_PT: number;
SVG_LENGTHTYPE_IN: number;
SVG_LENGTHTYPE_EMS: number;
SVG_LENGTHTYPE_PX: number;
SVG_LENGTHTYPE_UNKNOWN: number;
SVG_LENGTHTYPE_EXS: number;
}
interface SVGPolygonElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGPolygonElement: {
prototype: SVGPolygonElement;
new(): SVGPolygonElement;
}
interface HTMLPhraseElement extends HTMLElement {
/**
* Sets or retrieves the date and time of a modification to the object.
*/
dateTime: string;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLPhraseElement: {
prototype: HTMLPhraseElement;
new(): HTMLPhraseElement;
}
interface NavigatorStorageUtils {
}
interface SVGPathSegCurvetoCubicRel extends SVGPathSeg {
y: number;
y1: number;
x2: number;
x: number;
x1: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicRel: {
prototype: SVGPathSegCurvetoCubicRel;
new(): SVGPathSegCurvetoCubicRel;
}
interface SVGTextContentElement extends SVGElement, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
textLength: SVGAnimatedLength;
lengthAdjust: SVGAnimatedEnumeration;
getCharNumAtPosition(point: SVGPoint): number;
getStartPositionOfChar(charnum: number): SVGPoint;
getExtentOfChar(charnum: number): SVGRect;
getComputedTextLength(): number;
getSubStringLength(charnum: number, nchars: number): number;
selectSubString(charnum: number, nchars: number): void;
getNumberOfChars(): number;
getRotationOfChar(charnum: number): number;
getEndPositionOfChar(charnum: number): SVGPoint;
LENGTHADJUST_SPACING: number;
LENGTHADJUST_SPACINGANDGLYPHS: number;
LENGTHADJUST_UNKNOWN: number;
}
declare var SVGTextContentElement: {
prototype: SVGTextContentElement;
new(): SVGTextContentElement;
LENGTHADJUST_SPACING: number;
LENGTHADJUST_SPACINGANDGLYPHS: number;
LENGTHADJUST_UNKNOWN: number;
}
interface DOML2DeprecatedColorProperty {
color: string;
}
interface Location {
hash: string;
protocol: string;
search: string;
href: string;
hostname: string;
port: string;
pathname: string;
host: string;
reload(flag?: boolean): void;
replace(url: string): void;
assign(url: string): void;
toString(): string;
}
declare var Location: {
prototype: Location;
new(): Location;
}
interface HTMLTitleElement extends HTMLElement {
/**
* Retrieves or sets the text of the object as a string.
*/
text: string;
}
declare var HTMLTitleElement: {
prototype: HTMLTitleElement;
new(): HTMLTitleElement;
}
interface HTMLStyleElement extends HTMLElement, LinkStyle {
/**
* Sets or retrieves the media type.
*/
media: string;
/**
* Retrieves the CSS language in which the style sheet is written.
*/
type: string;
}
declare var HTMLStyleElement: {
prototype: HTMLStyleElement;
new(): HTMLStyleElement;
}
interface PerformanceEntry {
name: string;
startTime: number;
duration: number;
entryType: string;
}
declare var PerformanceEntry: {
prototype: PerformanceEntry;
new(): PerformanceEntry;
}
interface SVGTransform {
type: number;
angle: number;
matrix: SVGMatrix;
setTranslate(tx: number, ty: number): void;
setScale(sx: number, sy: number): void;
setMatrix(matrix: SVGMatrix): void;
setSkewY(angle: number): void;
setRotate(angle: number, cx: number, cy: number): void;
setSkewX(angle: number): void;
SVG_TRANSFORM_SKEWX: number;
SVG_TRANSFORM_UNKNOWN: number;
SVG_TRANSFORM_SCALE: number;
SVG_TRANSFORM_TRANSLATE: number;
SVG_TRANSFORM_MATRIX: number;
SVG_TRANSFORM_ROTATE: number;
SVG_TRANSFORM_SKEWY: number;
}
declare var SVGTransform: {
prototype: SVGTransform;
new(): SVGTransform;
SVG_TRANSFORM_SKEWX: number;
SVG_TRANSFORM_UNKNOWN: number;
SVG_TRANSFORM_SCALE: number;
SVG_TRANSFORM_TRANSLATE: number;
SVG_TRANSFORM_MATRIX: number;
SVG_TRANSFORM_ROTATE: number;
SVG_TRANSFORM_SKEWY: number;
}
interface UIEvent extends Event {
detail: number;
view: Window;
initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void;
}
declare var UIEvent: {
prototype: UIEvent;
new(): UIEvent;
}
interface SVGURIReference {
href: SVGAnimatedString;
}
interface SVGPathSeg {
pathSegType: number;
pathSegTypeAsLetter: string;
PATHSEG_MOVETO_REL: number;
PATHSEG_LINETO_VERTICAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
PATHSEG_CURVETO_QUADRATIC_REL: number;
PATHSEG_CURVETO_CUBIC_ABS: number;
PATHSEG_LINETO_HORIZONTAL_ABS: number;
PATHSEG_CURVETO_QUADRATIC_ABS: number;
PATHSEG_LINETO_ABS: number;
PATHSEG_CLOSEPATH: number;
PATHSEG_LINETO_HORIZONTAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
PATHSEG_LINETO_REL: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
PATHSEG_ARC_REL: number;
PATHSEG_CURVETO_CUBIC_REL: number;
PATHSEG_UNKNOWN: number;
PATHSEG_LINETO_VERTICAL_ABS: number;
PATHSEG_ARC_ABS: number;
PATHSEG_MOVETO_ABS: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
}
declare var SVGPathSeg: {
prototype: SVGPathSeg;
new(): SVGPathSeg;
PATHSEG_MOVETO_REL: number;
PATHSEG_LINETO_VERTICAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
PATHSEG_CURVETO_QUADRATIC_REL: number;
PATHSEG_CURVETO_CUBIC_ABS: number;
PATHSEG_LINETO_HORIZONTAL_ABS: number;
PATHSEG_CURVETO_QUADRATIC_ABS: number;
PATHSEG_LINETO_ABS: number;
PATHSEG_CLOSEPATH: number;
PATHSEG_LINETO_HORIZONTAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
PATHSEG_LINETO_REL: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
PATHSEG_ARC_REL: number;
PATHSEG_CURVETO_CUBIC_REL: number;
PATHSEG_UNKNOWN: number;
PATHSEG_LINETO_VERTICAL_ABS: number;
PATHSEG_ARC_ABS: number;
PATHSEG_MOVETO_ABS: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
}
interface WheelEvent extends MouseEvent {
deltaZ: number;
deltaX: number;
deltaMode: number;
deltaY: number;
initWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, deltaXArg: number, deltaYArg: number, deltaZArg: number, deltaMode: number): void;
getCurrentPoint(element: Element): void;
DOM_DELTA_PIXEL: number;
DOM_DELTA_LINE: number;
DOM_DELTA_PAGE: number;
}
declare var WheelEvent: {
prototype: WheelEvent;
new(): WheelEvent;
DOM_DELTA_PIXEL: number;
DOM_DELTA_LINE: number;
DOM_DELTA_PAGE: number;
}
interface MSEventAttachmentTarget {
attachEvent(event: string, listener: EventListener): boolean;
detachEvent(event: string, listener: EventListener): void;
}
interface SVGNumber {
value: number;
}
declare var SVGNumber: {
prototype: SVGNumber;
new(): SVGNumber;
}
interface SVGPathElement extends SVGElement, SVGStylable, SVGAnimatedPathData, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
getPathSegAtLength(distance: number): number;
getPointAtLength(distance: number): SVGPoint;
createSVGPathSegCurvetoQuadraticAbs(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticAbs;
createSVGPathSegLinetoRel(x: number, y: number): SVGPathSegLinetoRel;
createSVGPathSegCurvetoQuadraticRel(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticRel;
createSVGPathSegCurvetoCubicAbs(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicAbs;
createSVGPathSegLinetoAbs(x: number, y: number): SVGPathSegLinetoAbs;
createSVGPathSegClosePath(): SVGPathSegClosePath;
createSVGPathSegCurvetoCubicRel(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicRel;
createSVGPathSegCurvetoQuadraticSmoothRel(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothRel;
createSVGPathSegMovetoRel(x: number, y: number): SVGPathSegMovetoRel;
createSVGPathSegCurvetoCubicSmoothAbs(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothAbs;
createSVGPathSegMovetoAbs(x: number, y: number): SVGPathSegMovetoAbs;
createSVGPathSegLinetoVerticalRel(y: number): SVGPathSegLinetoVerticalRel;
createSVGPathSegArcRel(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcRel;
createSVGPathSegCurvetoQuadraticSmoothAbs(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothAbs;
createSVGPathSegLinetoHorizontalRel(x: number): SVGPathSegLinetoHorizontalRel;
getTotalLength(): number;
createSVGPathSegCurvetoCubicSmoothRel(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothRel;
createSVGPathSegLinetoHorizontalAbs(x: number): SVGPathSegLinetoHorizontalAbs;
createSVGPathSegLinetoVerticalAbs(y: number): SVGPathSegLinetoVerticalAbs;
createSVGPathSegArcAbs(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcAbs;
}
declare var SVGPathElement: {
prototype: SVGPathElement;
new(): SVGPathElement;
}
interface MSCompatibleInfo {
version: string;
userAgent: string;
}
declare var MSCompatibleInfo: {
prototype: MSCompatibleInfo;
new(): MSCompatibleInfo;
}
interface Text extends CharacterData, MSNodeExtensions {
wholeText: string;
splitText(offset: number): Text;
replaceWholeText(content: string): Text;
}
declare var Text: {
prototype: Text;
new(): Text;
}
interface SVGAnimatedRect {
animVal: SVGRect;
baseVal: SVGRect;
}
declare var SVGAnimatedRect: {
prototype: SVGAnimatedRect;
new(): SVGAnimatedRect;
}
interface CSSNamespaceRule extends CSSRule {
namespaceURI: string;
prefix: string;
}
declare var CSSNamespaceRule: {
prototype: CSSNamespaceRule;
new(): CSSNamespaceRule;
}
interface SVGPathSegList {
numberOfItems: number;
replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg;
getItem(index: number): SVGPathSeg;
clear(): void;
appendItem(newItem: SVGPathSeg): SVGPathSeg;
initialize(newItem: SVGPathSeg): SVGPathSeg;
removeItem(index: number): SVGPathSeg;
insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg;
}
declare var SVGPathSegList: {
prototype: SVGPathSegList;
new(): SVGPathSegList;
}
interface HTMLUnknownElement extends HTMLElement, MSDataBindingRecordSetReadonlyExtensions {
}
declare var HTMLUnknownElement: {
prototype: HTMLUnknownElement;
new(): HTMLUnknownElement;
}
interface HTMLAudioElement extends HTMLMediaElement {
}
declare var HTMLAudioElement: {
prototype: HTMLAudioElement;
new(): HTMLAudioElement;
}
interface MSImageResourceExtensions {
dynsrc: string;
vrml: string;
lowsrc: string;
start: string;
loop: number;
}
interface PositionError {
code: number;
message: string;
toString(): string;
POSITION_UNAVAILABLE: number;
PERMISSION_DENIED: number;
TIMEOUT: number;
}
declare var PositionError: {
prototype: PositionError;
new(): PositionError;
POSITION_UNAVAILABLE: number;
PERMISSION_DENIED: number;
TIMEOUT: number;
}
interface HTMLTableCellElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves a list of header cells that provide information for the object.
*/
headers: string;
/**
* Retrieves the position of the object in the cells collection of a row.
*/
cellIndex: number;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorLight: any;
/**
* Sets or retrieves the number columns in the table that the object should span.
*/
colSpan: number;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves a comma-delimited list of conceptual categories associated with the object.
*/
axis: string;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
/**
* Sets or retrieves abbreviated text for the object.
*/
abbr: string;
/**
* Sets or retrieves how many rows in a table the cell should span.
*/
rowSpan: number;
/**
* Sets or retrieves the group of cells in a table to which the object's information applies.
*/
scope: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorDark: any;
}
declare var HTMLTableCellElement: {
prototype: HTMLTableCellElement;
new(): HTMLTableCellElement;
}
interface SVGElementInstance extends EventTarget {
previousSibling: SVGElementInstance;
parentNode: SVGElementInstance;
lastChild: SVGElementInstance;
nextSibling: SVGElementInstance;
childNodes: SVGElementInstanceList;
correspondingUseElement: SVGUseElement;
correspondingElement: SVGElement;
firstChild: SVGElementInstance;
}
declare var SVGElementInstance: {
prototype: SVGElementInstance;
new(): SVGElementInstance;
}
interface MSNamespaceInfoCollection {
length: number;
add(namespace?: string, urn?: string, implementationUrl?: any): any;
item(index: any): any;
// [index: any]: any;
}
declare var MSNamespaceInfoCollection: {
prototype: MSNamespaceInfoCollection;
new(): MSNamespaceInfoCollection;
}
interface SVGCircleElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
cx: SVGAnimatedLength;
r: SVGAnimatedLength;
cy: SVGAnimatedLength;
}
declare var SVGCircleElement: {
prototype: SVGCircleElement;
new(): SVGCircleElement;
}
interface StyleSheetList {
length: number;
item(index?: number): StyleSheet;
[index: number]: StyleSheet;
}
declare var StyleSheetList: {
prototype: StyleSheetList;
new(): StyleSheetList;
}
interface CSSImportRule extends CSSRule {
styleSheet: CSSStyleSheet;
href: string;
media: MediaList;
}
declare var CSSImportRule: {
prototype: CSSImportRule;
new(): CSSImportRule;
}
interface CustomEvent extends Event {
detail: any;
initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void;
}
declare var CustomEvent: {
prototype: CustomEvent;
new(): CustomEvent;
}
interface HTMLBaseFontElement extends HTMLElement, DOML2DeprecatedColorProperty {
/**
* Sets or retrieves the current typeface family.
*/
face: string;
/**
* Sets or retrieves the font size of the object.
*/
size: number;
}
declare var HTMLBaseFontElement: {
prototype: HTMLBaseFontElement;
new(): HTMLBaseFontElement;
}
interface HTMLTextAreaElement extends HTMLElement, MSDataBindingExtensions {
/**
* Retrieves or sets the text in the entry field of the textArea element.
*/
value: string;
/**
* Sets or retrieves the value indicating whether the control is selected.
*/
status: any;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Gets or sets the starting position or offset of a text selection.
*/
selectionStart: number;
/**
* Sets or retrieves the number of horizontal rows contained in the object.
*/
rows: number;
/**
* Sets or retrieves the width of the object.
*/
cols: number;
/**
* Sets or retrieves the value indicated whether the content of the object is read-only.
*/
readOnly: boolean;
/**
* Sets or retrieves how to handle wordwrapping in the object.
*/
wrap: string;
/**
* Gets or sets the end position or offset of a text selection.
*/
selectionEnd: number;
/**
* Retrieves the type of control.
*/
type: string;
/**
* Sets or retrieves the initial contents of the object.
*/
defaultValue: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* When present, marks an element that can't be submitted without a value.
*/
required: boolean;
/**
* Sets or retrieves the maximum number of characters that the user can enter in a text control.
*/
maxLength: number;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
*/
placeholder: string;
/**
* Creates a TextRange object for the element.
*/
createTextRange(): TextRange;
/**
* Sets the start and end positions of a selection in a text field.
* @param start The offset into the text field for the start of the selection.
* @param end The offset into the text field for the end of the selection.
*/
setSelectionRange(start: number, end: number): void;
/**
* Highlights the input area of a form element.
*/
select(): void;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLTextAreaElement: {
prototype: HTMLTextAreaElement;
new(): HTMLTextAreaElement;
}
interface Geolocation {
clearWatch(watchId: number): void;
getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void;
watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number;
}
declare var Geolocation: {
prototype: Geolocation;
new(): Geolocation;
}
interface DOML2DeprecatedMarginStyle {
vspace: number;
hspace: number;
}
interface MSWindowModeless {
dialogTop: any;
dialogLeft: any;
dialogWidth: any;
dialogHeight: any;
menuArguments: any;
}
interface DOML2DeprecatedAlignmentStyle {
align: string;
}
interface HTMLMarqueeElement extends HTMLElement, MSDataBindingExtensions, DOML2DeprecatedBackgroundColorStyle {
width: string;
onbounce: (ev: Event) => any;
vspace: number;
trueSpeed: boolean;
scrollAmount: number;
scrollDelay: number;
behavior: string;
height: string;
loop: number;
direction: string;
hspace: number;
onstart: (ev: Event) => any;
onfinish: (ev: Event) => any;
stop(): void;
start(): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLMarqueeElement: {
prototype: HTMLMarqueeElement;
new(): HTMLMarqueeElement;
}
interface SVGRect {
y: number;
width: number;
x: number;
height: number;
}
declare var SVGRect: {
prototype: SVGRect;
new(): SVGRect;
}
interface MSNodeExtensions {
swapNode(otherNode: Node): Node;
removeNode(deep?: boolean): Node;
replaceNode(replacement: Node): Node;
}
interface History {
length: number;
state: any;
back(distance?: any): void;
forward(distance?: any): void;
go(delta?: any): void;
replaceState(statedata: any, title: string, url?: string): void;
pushState(statedata: any, title: string, url?: string): void;
}
declare var History: {
prototype: History;
new(): History;
}
interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
y: number;
y1: number;
x2: number;
x: number;
x1: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicAbs: {
prototype: SVGPathSegCurvetoCubicAbs;
new(): SVGPathSegCurvetoCubicAbs;
}
interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
y: number;
y1: number;
x: number;
x1: number;
}
declare var SVGPathSegCurvetoQuadraticAbs: {
prototype: SVGPathSegCurvetoQuadraticAbs;
new(): SVGPathSegCurvetoQuadraticAbs;
}
interface TimeRanges {
length: number;
start(index: number): number;
end(index: number): number;
}
declare var TimeRanges: {
prototype: TimeRanges;
new(): TimeRanges;
}
interface CSSRule {
cssText: string;
parentStyleSheet: CSSStyleSheet;
parentRule: CSSRule;
type: number;
IMPORT_RULE: number;
MEDIA_RULE: number;
STYLE_RULE: number;
NAMESPACE_RULE: number;
PAGE_RULE: number;
UNKNOWN_RULE: number;
FONT_FACE_RULE: number;
CHARSET_RULE: number;
KEYFRAMES_RULE: number;
KEYFRAME_RULE: number;
VIEWPORT_RULE: number;
}
declare var CSSRule: {
prototype: CSSRule;
new(): CSSRule;
IMPORT_RULE: number;
MEDIA_RULE: number;
STYLE_RULE: number;
NAMESPACE_RULE: number;
PAGE_RULE: number;
UNKNOWN_RULE: number;
FONT_FACE_RULE: number;
CHARSET_RULE: number;
KEYFRAMES_RULE: number;
KEYFRAME_RULE: number;
VIEWPORT_RULE: number;
}
interface SVGPathSegLinetoAbs extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegLinetoAbs: {
prototype: SVGPathSegLinetoAbs;
new(): SVGPathSegLinetoAbs;
}
interface HTMLModElement extends HTMLElement {
/**
* Sets or retrieves the date and time of a modification to the object.
*/
dateTime: string;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLModElement: {
prototype: HTMLModElement;
new(): HTMLModElement;
}
interface SVGMatrix {
e: number;
c: number;
a: number;
b: number;
d: number;
f: number;
multiply(secondMatrix: SVGMatrix): SVGMatrix;
flipY(): SVGMatrix;
skewY(angle: number): SVGMatrix;
inverse(): SVGMatrix;
scaleNonUniform(scaleFactorX: number, scaleFactorY: number): SVGMatrix;
rotate(angle: number): SVGMatrix;
flipX(): SVGMatrix;
translate(x: number, y: number): SVGMatrix;
scale(scaleFactor: number): SVGMatrix;
rotateFromVector(x: number, y: number): SVGMatrix;
skewX(angle: number): SVGMatrix;
}
declare var SVGMatrix: {
prototype: SVGMatrix;
new(): SVGMatrix;
}
interface MSPopupWindow {
document: Document;
isOpen: boolean;
show(x: number, y: number, w: number, h: number, element?: any): void;
hide(): void;
}
declare var MSPopupWindow: {
prototype: MSPopupWindow;
new(): MSPopupWindow;
}
interface BeforeUnloadEvent extends Event {
returnValue: string;
}
declare var BeforeUnloadEvent: {
prototype: BeforeUnloadEvent;
new(): BeforeUnloadEvent;
}
interface SVGUseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
animatedInstanceRoot: SVGElementInstance;
instanceRoot: SVGElementInstance;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGUseElement: {
prototype: SVGUseElement;
new(): SVGUseElement;
}
interface Event {
timeStamp: number;
defaultPrevented: boolean;
isTrusted: boolean;
currentTarget: EventTarget;
cancelBubble: boolean;
target: EventTarget;
eventPhase: number;
cancelable: boolean;
type: string;
srcElement: Element;
bubbles: boolean;
initEvent(eventTypeArg: string, canBubbleArg: boolean, cancelableArg: boolean): void;
stopPropagation(): void;
stopImmediatePropagation(): void;
preventDefault(): void;
CAPTURING_PHASE: number;
AT_TARGET: number;
BUBBLING_PHASE: number;
}
declare var Event: {
prototype: Event;
new(): Event;
CAPTURING_PHASE: number;
AT_TARGET: number;
BUBBLING_PHASE: number;
}
interface ImageData {
width: number;
data: number[];
height: number;
}
declare var ImageData: {
prototype: ImageData;
new(): ImageData;
}
interface HTMLTableColElement extends HTMLElement, HTMLTableAlignment {
/**
* Sets or retrieves the width of the object.
*/
width: any;
/**
* Sets or retrieves the alignment of the object relative to the display or table.
*/
align: string;
/**
* Sets or retrieves the number of columns in the group.
*/
span: number;
}
declare var HTMLTableColElement: {
prototype: HTMLTableColElement;
new(): HTMLTableColElement;
}
interface SVGException {
code: number;
message: string;
name: string;
toString(): string;
SVG_MATRIX_NOT_INVERTABLE: number;
SVG_WRONG_TYPE_ERR: number;
SVG_INVALID_VALUE_ERR: number;
}
declare var SVGException: {
prototype: SVGException;
new(): SVGException;
SVG_MATRIX_NOT_INVERTABLE: number;
SVG_WRONG_TYPE_ERR: number;
SVG_INVALID_VALUE_ERR: number;
}
interface SVGLinearGradientElement extends SVGGradientElement {
y1: SVGAnimatedLength;
x2: SVGAnimatedLength;
x1: SVGAnimatedLength;
y2: SVGAnimatedLength;
}
declare var SVGLinearGradientElement: {
prototype: SVGLinearGradientElement;
new(): SVGLinearGradientElement;
}
interface HTMLTableAlignment {
/**
* Sets or retrieves a value that you can use to implement your own ch functionality for the object.
*/
ch: string;
/**
* Sets or retrieves how text and other content are vertically aligned within the object that contains them.
*/
vAlign: string;
/**
* Sets or retrieves a value that you can use to implement your own chOff functionality for the object.
*/
chOff: string;
}
interface SVGAnimatedEnumeration {
animVal: number;
baseVal: number;
}
declare var SVGAnimatedEnumeration: {
prototype: SVGAnimatedEnumeration;
new(): SVGAnimatedEnumeration;
}
interface DOML2DeprecatedSizeProperty {
size: number;
}
interface HTMLUListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle {
}
declare var HTMLUListElement: {
prototype: HTMLUListElement;
new(): HTMLUListElement;
}
interface SVGRectElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
ry: SVGAnimatedLength;
rx: SVGAnimatedLength;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGRectElement: {
prototype: SVGRectElement;
new(): SVGRectElement;
}
interface ErrorEventHandler {
(event: Event, source: string, fileno: number, columnNumber: number): void;
}
interface HTMLDivElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
}
declare var HTMLDivElement: {
prototype: HTMLDivElement;
new(): HTMLDivElement;
}
interface DOML2DeprecatedBorderStyle {
border: string;
}
interface NamedNodeMap {
length: number;
removeNamedItemNS(namespaceURI: string, localName: string): Attr;
item(index: number): Attr;
[index: number]: Attr;
removeNamedItem(name: string): Attr;
getNamedItem(name: string): Attr;
// [name: string]: Attr;
setNamedItem(arg: Attr): Attr;
getNamedItemNS(namespaceURI: string, localName: string): Attr;
setNamedItemNS(arg: Attr): Attr;
}
declare var NamedNodeMap: {
prototype: NamedNodeMap;
new(): NamedNodeMap;
}
interface MediaList {
length: number;
mediaText: string;
deleteMedium(oldMedium: string): void;
appendMedium(newMedium: string): void;
item(index: number): string;
[index: number]: string;
toString(): string;
}
declare var MediaList: {
prototype: MediaList;
new(): MediaList;
}
interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegCurvetoQuadraticSmoothAbs: {
prototype: SVGPathSegCurvetoQuadraticSmoothAbs;
new(): SVGPathSegCurvetoQuadraticSmoothAbs;
}
interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
y: number;
x2: number;
x: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicSmoothRel: {
prototype: SVGPathSegCurvetoCubicSmoothRel;
new(): SVGPathSegCurvetoCubicSmoothRel;
}
interface SVGLengthList {
numberOfItems: number;
replaceItem(newItem: SVGLength, index: number): SVGLength;
getItem(index: number): SVGLength;
clear(): void;
appendItem(newItem: SVGLength): SVGLength;
initialize(newItem: SVGLength): SVGLength;
removeItem(index: number): SVGLength;
insertItemBefore(newItem: SVGLength, index: number): SVGLength;
}
declare var SVGLengthList: {
prototype: SVGLengthList;
new(): SVGLengthList;
}
interface ProcessingInstruction extends Node {
target: string;
data: string;
}
declare var ProcessingInstruction: {
prototype: ProcessingInstruction;
new(): ProcessingInstruction;
}
interface MSWindowExtensions {
status: string;
onmouseleave: (ev: MouseEvent) => any;
screenLeft: number;
offscreenBuffering: any;
maxConnectionsPerServer: number;
onmouseenter: (ev: MouseEvent) => any;
clipboardData: DataTransfer;
defaultStatus: string;
clientInformation: Navigator;
closed: boolean;
onhelp: (ev: Event) => any;
external: External;
event: MSEventObj;
onfocusout: (ev: FocusEvent) => any;
screenTop: number;
onfocusin: (ev: FocusEvent) => any;
showModelessDialog(url?: string, argument?: any, options?: any): Window;
navigate(url: string): void;
resizeBy(x?: number, y?: number): void;
item(index: any): any;
resizeTo(x?: number, y?: number): void;
createPopup(arguments?: any): MSPopupWindow;
toStaticHTML(html: string): string;
execScript(code: string, language?: string): any;
msWriteProfilerMark(profilerMarkName: string): void;
moveTo(x?: number, y?: number): void;
moveBy(x?: number, y?: number): void;
showHelp(url: string, helpArg?: any, features?: string): void;
captureEvents(): void;
releaseEvents(): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface MSBehaviorUrnsCollection {
length: number;
item(index: number): string;
}
declare var MSBehaviorUrnsCollection: {
prototype: MSBehaviorUrnsCollection;
new(): MSBehaviorUrnsCollection;
}
interface CSSFontFaceRule extends CSSRule {
style: CSSStyleDeclaration;
}
declare var CSSFontFaceRule: {
prototype: CSSFontFaceRule;
new(): CSSFontFaceRule;
}
interface DOML2DeprecatedBackgroundStyle {
background: string;
}
interface TextEvent extends UIEvent {
inputMethod: number;
data: string;
locale: string;
initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void;
DOM_INPUT_METHOD_KEYBOARD: number;
DOM_INPUT_METHOD_DROP: number;
DOM_INPUT_METHOD_IME: number;
DOM_INPUT_METHOD_SCRIPT: number;
DOM_INPUT_METHOD_VOICE: number;
DOM_INPUT_METHOD_UNKNOWN: number;
DOM_INPUT_METHOD_PASTE: number;
DOM_INPUT_METHOD_HANDWRITING: number;
DOM_INPUT_METHOD_OPTION: number;
DOM_INPUT_METHOD_MULTIMODAL: number;
}
declare var TextEvent: {
prototype: TextEvent;
new(): TextEvent;
DOM_INPUT_METHOD_KEYBOARD: number;
DOM_INPUT_METHOD_DROP: number;
DOM_INPUT_METHOD_IME: number;
DOM_INPUT_METHOD_SCRIPT: number;
DOM_INPUT_METHOD_VOICE: number;
DOM_INPUT_METHOD_UNKNOWN: number;
DOM_INPUT_METHOD_PASTE: number;
DOM_INPUT_METHOD_HANDWRITING: number;
DOM_INPUT_METHOD_OPTION: number;
DOM_INPUT_METHOD_MULTIMODAL: number;
}
interface DocumentFragment extends Node, NodeSelector, MSEventAttachmentTarget, MSNodeExtensions {
}
declare var DocumentFragment: {
prototype: DocumentFragment;
new(): DocumentFragment;
}
interface SVGPolylineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGPolylineElement: {
prototype: SVGPolylineElement;
new(): SVGPolylineElement;
}
interface SVGAnimatedPathData {
pathSegList: SVGPathSegList;
}
interface Position {
timestamp: Date;
coords: Coordinates;
}
declare var Position: {
prototype: Position;
new(): Position;
}
interface BookmarkCollection {
length: number;
item(index: number): any;
[index: number]: any;
}
declare var BookmarkCollection: {
prototype: BookmarkCollection;
new(): BookmarkCollection;
}
interface PerformanceMark extends PerformanceEntry {
}
declare var PerformanceMark: {
prototype: PerformanceMark;
new(): PerformanceMark;
}
interface CSSPageRule extends CSSRule {
pseudoClass: string;
selectorText: string;
selector: string;
style: CSSStyleDeclaration;
}
declare var CSSPageRule: {
prototype: CSSPageRule;
new(): CSSPageRule;
}
interface HTMLBRElement extends HTMLElement {
/**
* Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document.
*/
clear: string;
}
declare var HTMLBRElement: {
prototype: HTMLBRElement;
new(): HTMLBRElement;
}
interface MSNavigatorExtensions {
userLanguage: string;
plugins: MSPluginsCollection;
cookieEnabled: boolean;
appCodeName: string;
cpuClass: string;
appMinorVersion: string;
connectionSpeed: number;
browserLanguage: string;
mimeTypes: MSMimeTypesCollection;
systemLanguage: string;
language: string;
javaEnabled(): boolean;
taintEnabled(): boolean;
}
interface HTMLSpanElement extends HTMLElement, MSDataBindingExtensions {
}
declare var HTMLSpanElement: {
prototype: HTMLSpanElement;
new(): HTMLSpanElement;
}
interface HTMLHeadElement extends HTMLElement {
profile: string;
}
declare var HTMLHeadElement: {
prototype: HTMLHeadElement;
new(): HTMLHeadElement;
}
interface HTMLHeadingElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or retrieves a value that indicates the table alignment.
*/
align: string;
}
declare var HTMLHeadingElement: {
prototype: HTMLHeadingElement;
new(): HTMLHeadingElement;
}
interface HTMLFormElement extends HTMLElement, MSHTMLCollectionExtensions {
/**
* Sets or retrieves the number of objects in a collection.
*/
length: number;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form.
*/
acceptCharset: string;
/**
* Sets or retrieves the encoding type for the form.
*/
enctype: string;
/**
* Retrieves a collection, in source order, of all controls in a given form.
*/
elements: HTMLCollection;
/**
* Sets or retrieves the URL to which the form content is sent for processing.
*/
action: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves how to send the form data to the server.
*/
method: string;
/**
* Sets or retrieves the MIME encoding for the form.
*/
encoding: string;
/**
* Specifies whether autocomplete is applied to an editable text field.
*/
autocomplete: string;
/**
* Designates a form that is not validated when submitted.
*/
noValidate: boolean;
/**
* Fires when the user resets a form.
*/
reset(): void;
/**
* Retrieves a form object or an object from an elements collection.
* @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is a Number, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
* @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
*/
item(name?: any, index?: any): any;
/**
* Fires when a FORM is about to be submitted.
*/
submit(): void;
/**
* Retrieves a form object or an object from an elements collection.
*/
namedItem(name: string): any;
[name: string]: any;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
}
declare var HTMLFormElement: {
prototype: HTMLFormElement;
new(): HTMLFormElement;
}
interface SVGZoomAndPan {
zoomAndPan: number;
SVG_ZOOMANDPAN_MAGNIFY: number;
SVG_ZOOMANDPAN_UNKNOWN: number;
SVG_ZOOMANDPAN_DISABLE: number;
}
declare var SVGZoomAndPan: SVGZoomAndPan;
interface HTMLMediaElement extends HTMLElement {
/**
* Gets the earliest possible position, in seconds, that the playback can begin.
*/
initialTime: number;
/**
* Gets TimeRanges for the current media resource that has been played.
*/
played: TimeRanges;
/**
* Gets the address or URL of the current media resource that is selected by IHTMLMediaElement.
*/
currentSrc: string;
readyState: any;
/**
* The autobuffer element is not supported by Internet Explorer 9. Use the preload element instead.
*/
autobuffer: boolean;
/**
* Gets or sets a flag to specify whether playback should restart after it completes.
*/
loop: boolean;
/**
* Gets information about whether the playback has ended or not.
*/
ended: boolean;
/**
* Gets a collection of buffered time ranges.
*/
buffered: TimeRanges;
/**
* Returns an object representing the current error state of the audio or video element.
*/
error: MediaError;
/**
* Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked.
*/
seekable: TimeRanges;
/**
* Gets or sets a value that indicates whether to start playing the media automatically.
*/
autoplay: boolean;
/**
* Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player).
*/
controls: boolean;
/**
* Gets or sets the volume level for audio portions of the media element.
*/
volume: number;
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource.
*/
playbackRate: number;
/**
* Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming.
*/
duration: number;
/**
* Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted.
*/
muted: boolean;
/**
* Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource.
*/
defaultPlaybackRate: number;
/**
* Gets a flag that specifies whether playback is paused.
*/
paused: boolean;
/**
* Gets a flag that indicates whether the the client is currently moving to a new playback position in the media resource.
*/
seeking: boolean;
/**
* Gets or sets the current playback position, in seconds.
*/
currentTime: number;
/**
* Gets or sets the current playback position, in seconds.
*/
preload: string;
/**
* Gets the current network activity for the element.
*/
networkState: number;
/**
* Specifies the purpose of the audio or video media, such as background audio or alerts.
*/
msAudioCategory: string;
/**
* Specifies whether or not to enable low-latency playback on the media element.
*/
msRealTime: boolean;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
textTracks: TextTrackList;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
/**
* Returns an AudioTrackList object with the audio tracks for a given video element.
*/
audioTracks: AudioTrackList;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
/**
* Specifies the output device id that the audio will be sent to.
*/
msAudioDeviceType: string;
/**
* Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
*/
msPlayToPreferredSourceUri: string;
onmsneedkey: (ev: MSMediaKeyNeededEvent) => any;
/**
* Gets the MSMediaKeys object, which is used for decrypting media data, that is associated with this media element.
*/
msKeys: MSMediaKeys;
msGraphicsTrustStatus: MSGraphicsTrust;
/**
* Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not.
*/
pause(): void;
/**
* Loads and starts playback of a media resource.
*/
play(): void;
/**
* Fires immediately after the client loads the object.
*/
load(): void;
/**
* Returns a string that specifies whether the client can play a given media resource type.
*/
canPlayType(type: string): string;
/**
* Clears all effects from the media pipeline.
*/
msClearEffects(): void;
/**
* Specifies the media protection manager for a given media pipeline.
*/
msSetMediaProtectionManager(mediaProtectionManager?: any): void;
/**
* Inserts the specified audio effect into media pipeline.
*/
msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
msSetMediaKeys(mediaKeys: MSMediaKeys): void;
addTextTrack(kind: string, label?: string, language?: string): TextTrack;
HAVE_METADATA: number;
HAVE_CURRENT_DATA: number;
HAVE_NOTHING: number;
NETWORK_NO_SOURCE: number;
HAVE_ENOUGH_DATA: number;
NETWORK_EMPTY: number;
NETWORK_LOADING: number;
NETWORK_IDLE: number;
HAVE_FUTURE_DATA: number;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLMediaElement: {
prototype: HTMLMediaElement;
new(): HTMLMediaElement;
HAVE_METADATA: number;
HAVE_CURRENT_DATA: number;
HAVE_NOTHING: number;
NETWORK_NO_SOURCE: number;
HAVE_ENOUGH_DATA: number;
NETWORK_EMPTY: number;
NETWORK_LOADING: number;
NETWORK_IDLE: number;
HAVE_FUTURE_DATA: number;
}
interface ElementCSSInlineStyle {
runtimeStyle: MSStyleCSSProperties;
currentStyle: MSCurrentStyleCSSProperties;
doScroll(component?: any): void;
componentFromPoint(x: number, y: number): string;
}
interface DOMParser {
parseFromString(source: string, mimeType: string): Document;
}
declare var DOMParser: {
prototype: DOMParser;
new(): DOMParser;
}
interface MSMimeTypesCollection {
length: number;
}
declare var MSMimeTypesCollection: {
prototype: MSMimeTypesCollection;
new(): MSMimeTypesCollection;
}
interface StyleSheet {
disabled: boolean;
ownerNode: Node;
parentStyleSheet: StyleSheet;
href: string;
media: MediaList;
type: string;
title: string;
}
declare var StyleSheet: {
prototype: StyleSheet;
new(): StyleSheet;
}
interface SVGTextPathElement extends SVGTextContentElement, SVGURIReference {
startOffset: SVGAnimatedLength;
method: SVGAnimatedEnumeration;
spacing: SVGAnimatedEnumeration;
TEXTPATH_SPACINGTYPE_EXACT: number;
TEXTPATH_METHODTYPE_STRETCH: number;
TEXTPATH_SPACINGTYPE_AUTO: number;
TEXTPATH_SPACINGTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_ALIGN: number;
}
declare var SVGTextPathElement: {
prototype: SVGTextPathElement;
new(): SVGTextPathElement;
TEXTPATH_SPACINGTYPE_EXACT: number;
TEXTPATH_METHODTYPE_STRETCH: number;
TEXTPATH_SPACINGTYPE_AUTO: number;
TEXTPATH_SPACINGTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_ALIGN: number;
}
interface HTMLDTElement extends HTMLElement {
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
}
declare var HTMLDTElement: {
prototype: HTMLDTElement;
new(): HTMLDTElement;
}
interface NodeList {
length: number;
item(index: number): Node;
[index: number]: Node;
}
declare var NodeList: {
prototype: NodeList;
new(): NodeList;
}
interface XMLSerializer {
serializeToString(target: Node): string;
}
declare var XMLSerializer: {
prototype: XMLSerializer;
new(): XMLSerializer;
}
interface PerformanceMeasure extends PerformanceEntry {
}
declare var PerformanceMeasure: {
prototype: PerformanceMeasure;
new(): PerformanceMeasure;
}
interface SVGGradientElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGExternalResourcesRequired, SVGURIReference {
spreadMethod: SVGAnimatedEnumeration;
gradientTransform: SVGAnimatedTransformList;
gradientUnits: SVGAnimatedEnumeration;
SVG_SPREADMETHOD_REFLECT: number;
SVG_SPREADMETHOD_PAD: number;
SVG_SPREADMETHOD_UNKNOWN: number;
SVG_SPREADMETHOD_REPEAT: number;
}
declare var SVGGradientElement: {
prototype: SVGGradientElement;
new(): SVGGradientElement;
SVG_SPREADMETHOD_REFLECT: number;
SVG_SPREADMETHOD_PAD: number;
SVG_SPREADMETHOD_UNKNOWN: number;
SVG_SPREADMETHOD_REPEAT: number;
}
interface NodeFilter {
acceptNode(n: Node): number;
SHOW_ENTITY_REFERENCE: number;
SHOW_NOTATION: number;
SHOW_ENTITY: number;
SHOW_DOCUMENT: number;
SHOW_PROCESSING_INSTRUCTION: number;
FILTER_REJECT: number;
SHOW_CDATA_SECTION: number;
FILTER_ACCEPT: number;
SHOW_ALL: number;
SHOW_DOCUMENT_TYPE: number;
SHOW_TEXT: number;
SHOW_ELEMENT: number;
SHOW_COMMENT: number;
FILTER_SKIP: number;
SHOW_ATTRIBUTE: number;
SHOW_DOCUMENT_FRAGMENT: number;
}
declare var NodeFilter: NodeFilter;
interface SVGNumberList {
numberOfItems: number;
replaceItem(newItem: SVGNumber, index: number): SVGNumber;
getItem(index: number): SVGNumber;
clear(): void;
appendItem(newItem: SVGNumber): SVGNumber;
initialize(newItem: SVGNumber): SVGNumber;
removeItem(index: number): SVGNumber;
insertItemBefore(newItem: SVGNumber, index: number): SVGNumber;
}
declare var SVGNumberList: {
prototype: SVGNumberList;
new(): SVGNumberList;
}
interface MediaError {
code: number;
msExtendedCode: number;
MEDIA_ERR_ABORTED: number;
MEDIA_ERR_NETWORK: number;
MEDIA_ERR_SRC_NOT_SUPPORTED: number;
MEDIA_ERR_DECODE: number;
MS_MEDIA_ERR_ENCRYPTED: number;
}
declare var MediaError: {
prototype: MediaError;
new(): MediaError;
MEDIA_ERR_ABORTED: number;
MEDIA_ERR_NETWORK: number;
MEDIA_ERR_SRC_NOT_SUPPORTED: number;
MEDIA_ERR_DECODE: number;
MS_MEDIA_ERR_ENCRYPTED: number;
}
interface HTMLFieldSetElement extends HTMLElement {
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLFieldSetElement: {
prototype: HTMLFieldSetElement;
new(): HTMLFieldSetElement;
}
interface HTMLBGSoundElement extends HTMLElement {
/**
* Sets or gets the value indicating how the volume of the background sound is divided between the left speaker and the right speaker.
*/
balance: any;
/**
* Sets or gets the volume setting for the sound.
*/
volume: any;
/**
* Sets or gets the URL of a sound to play.
*/
src: string;
/**
* Sets or retrieves the number of times a sound or video clip will loop when activated.
*/
loop: number;
}
declare var HTMLBGSoundElement: {
prototype: HTMLBGSoundElement;
new(): HTMLBGSoundElement;
}
interface Comment extends CharacterData {
text: string;
}
declare var Comment: {
prototype: Comment;
new(): Comment;
}
interface PerformanceResourceTiming extends PerformanceEntry {
redirectStart: number;
redirectEnd: number;
domainLookupEnd: number;
responseStart: number;
domainLookupStart: number;
fetchStart: number;
requestStart: number;
connectEnd: number;
connectStart: number;
initiatorType: string;
responseEnd: number;
}
declare var PerformanceResourceTiming: {
prototype: PerformanceResourceTiming;
new(): PerformanceResourceTiming;
}
interface CanvasPattern {
}
declare var CanvasPattern: {
prototype: CanvasPattern;
new(): CanvasPattern;
}
interface HTMLHRElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves whether the horizontal rule is drawn with 3-D shading.
*/
noShade: boolean;
}
declare var HTMLHRElement: {
prototype: HTMLHRElement;
new(): HTMLHRElement;
}
interface HTMLObjectElement extends HTMLElement, GetSVGDocument, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Sets or retrieves the Internet media type for the code associated with the object.
*/
codeType: string;
/**
* Retrieves the contained object.
*/
object: any;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the URL of the file containing the compiled Java class.
*/
code: string;
/**
* Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
*/
archive: string;
/**
* Sets or retrieves a message to be displayed while an object is loading.
*/
standby: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves the class identifier for the object.
*/
classid: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* Sets or retrieves the URL that references the data of the object.
*/
data: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Retrieves the document object of the page or frame.
*/
contentDocument: Document;
/**
* Gets or sets the optional alternative HTML script to execute if the object fails to load.
*/
altHtml: string;
/**
* Sets or retrieves the URL of the component.
*/
codeBase: string;
declare: boolean;
/**
* Sets or retrieves the MIME type of the object.
*/
type: string;
/**
* Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
*/
BaseHref: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
*/
msPlayToPreferredSourceUri: string;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
readyState: number;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLObjectElement: {
prototype: HTMLObjectElement;
new(): HTMLObjectElement;
}
interface HTMLEmbedElement extends HTMLElement, GetSVGDocument {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Retrieves the palette used for the embedded document.
*/
palette: string;
/**
* Sets or retrieves a URL to be loaded by the object.
*/
src: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
hidden: string;
/**
* Retrieves the URL of the plug-in used to view an embedded document.
*/
pluginspage: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Sets or retrieves the height and width units of the embed object.
*/
units: string;
/**
* Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
*/
msPlayToPreferredSourceUri: string;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
readyState: string;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
}
declare var HTMLEmbedElement: {
prototype: HTMLEmbedElement;
new(): HTMLEmbedElement;
}
interface StorageEvent extends Event {
oldValue: any;
newValue: any;
url: string;
storageArea: Storage;
key: string;
initStorageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, keyArg: string, oldValueArg: any, newValueArg: any, urlArg: string, storageAreaArg: Storage): void;
}
declare var StorageEvent: {
prototype: StorageEvent;
new(): StorageEvent;
}
interface CharacterData extends Node {
length: number;
data: string;
deleteData(offset: number, count: number): void;
replaceData(offset: number, count: number, arg: string): void;
appendData(arg: string): void;
insertData(offset: number, arg: string): void;
substringData(offset: number, count: number): string;
}
declare var CharacterData: {
prototype: CharacterData;
new(): CharacterData;
}
interface HTMLOptGroupElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the ordinal position of an option in a list box.
*/
index: number;
/**
* Sets or retrieves the status of an option.
*/
defaultSelected: boolean;
/**
* Sets or retrieves the text string specified by the option tag.
*/
text: string;
/**
* Sets or retrieves the value which is returned to the server when the form control is submitted.
*/
value: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves a value that you can use to implement your own label functionality for the object.
*/
label: string;
/**
* Sets or retrieves whether the option in the list box is the default item.
*/
selected: boolean;
}
declare var HTMLOptGroupElement: {
prototype: HTMLOptGroupElement;
new(): HTMLOptGroupElement;
}
interface HTMLIsIndexElement extends HTMLElement {
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the URL to which the form content is sent for processing.
*/
action: string;
prompt: string;
}
declare var HTMLIsIndexElement: {
prototype: HTMLIsIndexElement;
new(): HTMLIsIndexElement;
}
interface SVGPathSegLinetoRel extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegLinetoRel: {
prototype: SVGPathSegLinetoRel;
new(): SVGPathSegLinetoRel;
}
interface DOMException {
code: number;
message: string;
name: string;
toString(): string;
HIERARCHY_REQUEST_ERR: number;
NO_MODIFICATION_ALLOWED_ERR: number;
INVALID_MODIFICATION_ERR: number;
NAMESPACE_ERR: number;
INVALID_CHARACTER_ERR: number;
TYPE_MISMATCH_ERR: number;
ABORT_ERR: number;
INVALID_STATE_ERR: number;
SECURITY_ERR: number;
NETWORK_ERR: number;
WRONG_DOCUMENT_ERR: number;
QUOTA_EXCEEDED_ERR: number;
INDEX_SIZE_ERR: number;
DOMSTRING_SIZE_ERR: number;
SYNTAX_ERR: number;
SERIALIZE_ERR: number;
VALIDATION_ERR: number;
NOT_FOUND_ERR: number;
URL_MISMATCH_ERR: number;
PARSE_ERR: number;
NO_DATA_ALLOWED_ERR: number;
NOT_SUPPORTED_ERR: number;
INVALID_ACCESS_ERR: number;
INUSE_ATTRIBUTE_ERR: number;
INVALID_NODE_TYPE_ERR: number;
DATA_CLONE_ERR: number;
TIMEOUT_ERR: number;
}
declare var DOMException: {
prototype: DOMException;
new(): DOMException;
HIERARCHY_REQUEST_ERR: number;
NO_MODIFICATION_ALLOWED_ERR: number;
INVALID_MODIFICATION_ERR: number;
NAMESPACE_ERR: number;
INVALID_CHARACTER_ERR: number;
TYPE_MISMATCH_ERR: number;
ABORT_ERR: number;
INVALID_STATE_ERR: number;
SECURITY_ERR: number;
NETWORK_ERR: number;
WRONG_DOCUMENT_ERR: number;
QUOTA_EXCEEDED_ERR: number;
INDEX_SIZE_ERR: number;
DOMSTRING_SIZE_ERR: number;
SYNTAX_ERR: number;
SERIALIZE_ERR: number;
VALIDATION_ERR: number;
NOT_FOUND_ERR: number;
URL_MISMATCH_ERR: number;
PARSE_ERR: number;
NO_DATA_ALLOWED_ERR: number;
NOT_SUPPORTED_ERR: number;
INVALID_ACCESS_ERR: number;
INUSE_ATTRIBUTE_ERR: number;
INVALID_NODE_TYPE_ERR: number;
DATA_CLONE_ERR: number;
TIMEOUT_ERR: number;
}
interface SVGAnimatedBoolean {
animVal: boolean;
baseVal: boolean;
}
declare var SVGAnimatedBoolean: {
prototype: SVGAnimatedBoolean;
new(): SVGAnimatedBoolean;
}
interface MSCompatibleInfoCollection {
length: number;
item(index: number): MSCompatibleInfo;
}
declare var MSCompatibleInfoCollection: {
prototype: MSCompatibleInfoCollection;
new(): MSCompatibleInfoCollection;
}
interface SVGSwitchElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGSwitchElement: {
prototype: SVGSwitchElement;
new(): SVGSwitchElement;
}
interface SVGPreserveAspectRatio {
align: number;
meetOrSlice: number;
SVG_PRESERVEASPECTRATIO_NONE: number;
SVG_PRESERVEASPECTRATIO_XMINYMID: number;
SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
SVG_MEETORSLICE_UNKNOWN: number;
SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
SVG_MEETORSLICE_MEET: number;
SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
SVG_MEETORSLICE_SLICE: number;
SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
}
declare var SVGPreserveAspectRatio: {
prototype: SVGPreserveAspectRatio;
new(): SVGPreserveAspectRatio;
SVG_PRESERVEASPECTRATIO_NONE: number;
SVG_PRESERVEASPECTRATIO_XMINYMID: number;
SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
SVG_MEETORSLICE_UNKNOWN: number;
SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
SVG_MEETORSLICE_MEET: number;
SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
SVG_MEETORSLICE_SLICE: number;
SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
}
interface Attr extends Node {
expando: boolean;
specified: boolean;
ownerElement: Element;
value: string;
name: string;
}
declare var Attr: {
prototype: Attr;
new(): Attr;
}
interface PerformanceNavigation {
redirectCount: number;
type: number;
toJSON(): any;
TYPE_RELOAD: number;
TYPE_RESERVED: number;
TYPE_BACK_FORWARD: number;
TYPE_NAVIGATE: number;
}
declare var PerformanceNavigation: {
prototype: PerformanceNavigation;
new(): PerformanceNavigation;
TYPE_RELOAD: number;
TYPE_RESERVED: number;
TYPE_BACK_FORWARD: number;
TYPE_NAVIGATE: number;
}
interface SVGStopElement extends SVGElement, SVGStylable {
offset: SVGAnimatedNumber;
}
declare var SVGStopElement: {
prototype: SVGStopElement;
new(): SVGStopElement;
}
interface PositionCallback {
(position: Position): void;
}
interface SVGSymbolElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired {
}
declare var SVGSymbolElement: {
prototype: SVGSymbolElement;
new(): SVGSymbolElement;
}
interface SVGElementInstanceList {
length: number;
item(index: number): SVGElementInstance;
}
declare var SVGElementInstanceList: {
prototype: SVGElementInstanceList;
new(): SVGElementInstanceList;
}
interface CSSRuleList {
length: number;
item(index: number): CSSRule;
[index: number]: CSSRule;
}
declare var CSSRuleList: {
prototype: CSSRuleList;
new(): CSSRuleList;
}
interface MSDataBindingRecordSetExtensions {
recordset: any;
namedRecordset(dataMember: string, hierarchy?: any): any;
}
interface LinkStyle {
styleSheet: StyleSheet;
sheet: StyleSheet;
}
interface HTMLVideoElement extends HTMLMediaElement {
/**
* Gets or sets the width of the video element.
*/
width: number;
/**
* Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known.
*/
videoWidth: number;
/**
* Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known.
*/
videoHeight: number;
/**
* Gets or sets the height of the video element.
*/
height: number;
/**
* Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available.
*/
poster: string;
msIsStereo3D: boolean;
msStereo3DPackingMode: string;
onMSVideoOptimalLayoutChanged: (ev: any) => any;
onMSVideoFrameStepCompleted: (ev: any) => any;
msStereo3DRenderMode: string;
msIsLayoutOptimalForPlayback: boolean;
msHorizontalMirror: boolean;
onMSVideoFormatChanged: (ev: any) => any;
msZoom: boolean;
msInsertVideoEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
msSetVideoRectangle(left: number, top: number, right: number, bottom: number): void;
msFrameStep(forward: boolean): void;
getVideoPlaybackQuality(): VideoPlaybackQuality;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "MSVideoFormatChanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLVideoElement: {
prototype: HTMLVideoElement;
new(): HTMLVideoElement;
}
interface ClientRectList {
length: number;
item(index: number): ClientRect;
[index: number]: ClientRect;
}
declare var ClientRectList: {
prototype: ClientRectList;
new(): ClientRectList;
}
interface SVGMaskElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
maskUnits: SVGAnimatedEnumeration;
maskContentUnits: SVGAnimatedEnumeration;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGMaskElement: {
prototype: SVGMaskElement;
new(): SVGMaskElement;
}
interface External {
}
declare var External: {
prototype: External;
new(): External;
}
interface MSGestureEvent extends UIEvent {
offsetY: number;
translationY: number;
velocityExpansion: number;
velocityY: number;
velocityAngular: number;
translationX: number;
velocityX: number;
hwTimestamp: number;
offsetX: number;
screenX: number;
rotation: number;
expansion: number;
clientY: number;
screenY: number;
scale: number;
gestureObject: any;
clientX: number;
initGestureEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, offsetXArg: number, offsetYArg: number, translationXArg: number, translationYArg: number, scaleArg: number, expansionArg: number, rotationArg: number, velocityXArg: number, velocityYArg: number, velocityExpansionArg: number, velocityAngularArg: number, hwTimestampArg: number): void;
MSGESTURE_FLAG_BEGIN: number;
MSGESTURE_FLAG_END: number;
MSGESTURE_FLAG_CANCEL: number;
MSGESTURE_FLAG_INERTIA: number;
MSGESTURE_FLAG_NONE: number;
}
declare var MSGestureEvent: {
prototype: MSGestureEvent;
new(): MSGestureEvent;
MSGESTURE_FLAG_BEGIN: number;
MSGESTURE_FLAG_END: number;
MSGESTURE_FLAG_CANCEL: number;
MSGESTURE_FLAG_INERTIA: number;
MSGESTURE_FLAG_NONE: number;
}
interface ErrorEvent extends Event {
colno: number;
filename: string;
error: any;
lineno: number;
message: string;
initErrorEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, messageArg: string, filenameArg: string, linenoArg: number): void;
}
declare var ErrorEvent: {
prototype: ErrorEvent;
new(): ErrorEvent;
}
interface SVGFilterElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
filterResX: SVGAnimatedInteger;
filterUnits: SVGAnimatedEnumeration;
primitiveUnits: SVGAnimatedEnumeration;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
filterResY: SVGAnimatedInteger;
setFilterRes(filterResX: number, filterResY: number): void;
}
declare var SVGFilterElement: {
prototype: SVGFilterElement;
new(): SVGFilterElement;
}
interface TrackEvent extends Event {
track: any;
}
declare var TrackEvent: {
prototype: TrackEvent;
new(): TrackEvent;
}
interface SVGFEMergeNodeElement extends SVGElement {
in1: SVGAnimatedString;
}
declare var SVGFEMergeNodeElement: {
prototype: SVGFEMergeNodeElement;
new(): SVGFEMergeNodeElement;
}
interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
}
declare var SVGFEFloodElement: {
prototype: SVGFEFloodElement;
new(): SVGFEFloodElement;
}
interface MSGesture {
target: Element;
addPointer(pointerId: number): void;
stop(): void;
}
declare var MSGesture: {
prototype: MSGesture;
new(): MSGesture;
}
interface TextTrackCue extends EventTarget {
onenter: (ev: Event) => any;
track: TextTrack;
endTime: number;
text: string;
pauseOnExit: boolean;
id: string;
startTime: number;
onexit: (ev: Event) => any;
getCueAsHTML(): DocumentFragment;
addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var TextTrackCue: {
prototype: TextTrackCue;
new(startTime: number, endTime: number, text: string): TextTrackCue;
}
interface MSStreamReader extends MSBaseReader {
error: DOMError;
readAsArrayBuffer(stream: MSStream, size?: number): void;
readAsBlob(stream: MSStream, size?: number): void;
readAsDataURL(stream: MSStream, size?: number): void;
readAsText(stream: MSStream, encoding?: string, size?: number): void;
}
declare var MSStreamReader: {
prototype: MSStreamReader;
new(): MSStreamReader;
}
interface DOMTokenList {
length: number;
contains(token: string): boolean;
remove(token: string): void;
toggle(token: string): boolean;
add(token: string): void;
item(index: number): string;
[index: number]: string;
toString(): string;
}
declare var DOMTokenList: {
prototype: DOMTokenList;
new(): DOMTokenList;
}
interface SVGFEFuncAElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncAElement: {
prototype: SVGFEFuncAElement;
new(): SVGFEFuncAElement;
}
interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in1: SVGAnimatedString;
}
declare var SVGFETileElement: {
prototype: SVGFETileElement;
new(): SVGFETileElement;
}
interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in2: SVGAnimatedString;
mode: SVGAnimatedEnumeration;
in1: SVGAnimatedString;
SVG_FEBLEND_MODE_DARKEN: number;
SVG_FEBLEND_MODE_UNKNOWN: number;
SVG_FEBLEND_MODE_MULTIPLY: number;
SVG_FEBLEND_MODE_NORMAL: number;
SVG_FEBLEND_MODE_SCREEN: number;
SVG_FEBLEND_MODE_LIGHTEN: number;
}
declare var SVGFEBlendElement: {
prototype: SVGFEBlendElement;
new(): SVGFEBlendElement;
SVG_FEBLEND_MODE_DARKEN: number;
SVG_FEBLEND_MODE_UNKNOWN: number;
SVG_FEBLEND_MODE_MULTIPLY: number;
SVG_FEBLEND_MODE_NORMAL: number;
SVG_FEBLEND_MODE_SCREEN: number;
SVG_FEBLEND_MODE_LIGHTEN: number;
}
interface MessageChannel {
port2: MessagePort;
port1: MessagePort;
}
declare var MessageChannel: {
prototype: MessageChannel;
new(): MessageChannel;
}
interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
}
declare var SVGFEMergeElement: {
prototype: SVGFEMergeElement;
new(): SVGFEMergeElement;
}
interface TransitionEvent extends Event {
propertyName: string;
elapsedTime: number;
initTransitionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, propertyNameArg: string, elapsedTimeArg: number): void;
}
declare var TransitionEvent: {
prototype: TransitionEvent;
new(): TransitionEvent;
}
interface MediaQueryList {
matches: boolean;
media: string;
addListener(listener: MediaQueryListListener): void;
removeListener(listener: MediaQueryListListener): void;
}
declare var MediaQueryList: {
prototype: MediaQueryList;
new(): MediaQueryList;
}
interface DOMError {
name: string;
toString(): string;
}
declare var DOMError: {
prototype: DOMError;
new(): DOMError;
}
interface CloseEvent extends Event {
wasClean: boolean;
reason: string;
code: number;
initCloseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, wasCleanArg: boolean, codeArg: number, reasonArg: string): void;
}
declare var CloseEvent: {
prototype: CloseEvent;
new(): CloseEvent;
}
interface WebSocket extends EventTarget {
protocol: string;
readyState: number;
bufferedAmount: number;
onopen: (ev: Event) => any;
extensions: string;
onmessage: (ev: MessageEvent) => any;
onclose: (ev: CloseEvent) => any;
onerror: (ev: ErrorEvent) => any;
binaryType: string;
url: string;
close(code?: number, reason?: string): void;
send(data: any): void;
OPEN: number;
CLOSING: number;
CONNECTING: number;
CLOSED: number;
addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var WebSocket: {
prototype: WebSocket;
new(url: string, protocols?: string): WebSocket;
new(url: string, protocols?: string[]): WebSocket;
OPEN: number;
CLOSING: number;
CONNECTING: number;
CLOSED: number;
}
interface SVGFEPointLightElement extends SVGElement {
y: SVGAnimatedNumber;
x: SVGAnimatedNumber;
z: SVGAnimatedNumber;
}
declare var SVGFEPointLightElement: {
prototype: SVGFEPointLightElement;
new(): SVGFEPointLightElement;
}
interface ProgressEvent extends Event {
loaded: number;
lengthComputable: boolean;
total: number;
initProgressEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, lengthComputableArg: boolean, loadedArg: number, totalArg: number): void;
}
declare var ProgressEvent: {
prototype: ProgressEvent;
new(): ProgressEvent;
}
interface IDBObjectStore {
indexNames: DOMStringList;
name: string;
transaction: IDBTransaction;
keyPath: string;
count(key?: any): IDBRequest;
add(value: any, key?: any): IDBRequest;
clear(): IDBRequest;
createIndex(name: string, keyPath: string, optionalParameters?: any): IDBIndex;
put(value: any, key?: any): IDBRequest;
openCursor(range?: any, direction?: string): IDBRequest;
deleteIndex(indexName: string): void;
index(name: string): IDBIndex;
get(key: any): IDBRequest;
delete(key: any): IDBRequest;
}
declare var IDBObjectStore: {
prototype: IDBObjectStore;
new(): IDBObjectStore;
}
interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
stdDeviationX: SVGAnimatedNumber;
in1: SVGAnimatedString;
stdDeviationY: SVGAnimatedNumber;
setStdDeviation(stdDeviationX: number, stdDeviationY: number): void;
}
declare var SVGFEGaussianBlurElement: {
prototype: SVGFEGaussianBlurElement;
new(): SVGFEGaussianBlurElement;
}
interface SVGFilterPrimitiveStandardAttributes extends SVGStylable {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
result: SVGAnimatedString;
}
interface IDBVersionChangeEvent extends Event {
newVersion: number;
oldVersion: number;
}
declare var IDBVersionChangeEvent: {
prototype: IDBVersionChangeEvent;
new(): IDBVersionChangeEvent;
}
interface IDBIndex {
unique: boolean;
name: string;
keyPath: string;
objectStore: IDBObjectStore;
count(key?: any): IDBRequest;
getKey(key: any): IDBRequest;
openKeyCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
get(key: any): IDBRequest;
openCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
}
declare var IDBIndex: {
prototype: IDBIndex;
new(): IDBIndex;
}
interface FileList {
length: number;
item(index: number): File;
[index: number]: File;
}
declare var FileList: {
prototype: FileList;
new(): FileList;
}
interface IDBCursor {
source: any;
direction: string;
key: any;
primaryKey: any;
advance(count: number): void;
delete(): IDBRequest;
continue(key?: any): void;
update(value: any): IDBRequest;
PREV: string;
PREV_NO_DUPLICATE: string;
NEXT: string;
NEXT_NO_DUPLICATE: string;
}
declare var IDBCursor: {
prototype: IDBCursor;
new(): IDBCursor;
PREV: string;
PREV_NO_DUPLICATE: string;
NEXT: string;
NEXT_NO_DUPLICATE: string;
}
interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
kernelUnitLengthY: SVGAnimatedNumber;
surfaceScale: SVGAnimatedNumber;
specularExponent: SVGAnimatedNumber;
in1: SVGAnimatedString;
kernelUnitLengthX: SVGAnimatedNumber;
specularConstant: SVGAnimatedNumber;
}
declare var SVGFESpecularLightingElement: {
prototype: SVGFESpecularLightingElement;
new(): SVGFESpecularLightingElement;
}
interface File extends Blob {
lastModifiedDate: any;
name: string;
}
declare var File: {
prototype: File;
new(): File;
}
interface URL {
revokeObjectURL(url: string): void;
createObjectURL(object: any, options?: ObjectURLOptions): string;
}
declare var URL: URL;
interface IDBCursorWithValue extends IDBCursor {
value: any;
}
declare var IDBCursorWithValue: {
prototype: IDBCursorWithValue;
new(): IDBCursorWithValue;
}
interface XMLHttpRequestEventTarget extends EventTarget {
onprogress: (ev: ProgressEvent) => any;
onerror: (ev: ErrorEvent) => any;
onload: (ev: Event) => any;
ontimeout: (ev: Event) => any;
onabort: (ev: UIEvent) => any;
onloadstart: (ev: Event) => any;
onloadend: (ev: ProgressEvent) => any;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var XMLHttpRequestEventTarget: {
prototype: XMLHttpRequestEventTarget;
new(): XMLHttpRequestEventTarget;
}
interface IDBEnvironment {
msIndexedDB: IDBFactory;
indexedDB: IDBFactory;
}
interface AudioTrackList extends EventTarget {
length: number;
onchange: (ev: Event) => any;
onaddtrack: (ev: TrackEvent) => any;
onremovetrack: (ev: any /*PluginArray*/) => any;
getTrackById(id: string): AudioTrack;
item(index: number): AudioTrack;
[index: number]: AudioTrack;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
addEventListener(type: "removetrack", listener: (ev: any /*PluginArray*/) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var AudioTrackList: {
prototype: AudioTrackList;
new(): AudioTrackList;
}
interface MSBaseReader extends EventTarget {
onprogress: (ev: ProgressEvent) => any;
readyState: number;
onabort: (ev: UIEvent) => any;
onloadend: (ev: ProgressEvent) => any;
onerror: (ev: ErrorEvent) => any;
onload: (ev: Event) => any;
onloadstart: (ev: Event) => any;
result: any;
abort(): void;
LOADING: number;
EMPTY: number;
DONE: number;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
operator: SVGAnimatedEnumeration;
radiusX: SVGAnimatedNumber;
radiusY: SVGAnimatedNumber;
in1: SVGAnimatedString;
SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
SVG_MORPHOLOGY_OPERATOR_ERODE: number;
SVG_MORPHOLOGY_OPERATOR_DILATE: number;
}
declare var SVGFEMorphologyElement: {
prototype: SVGFEMorphologyElement;
new(): SVGFEMorphologyElement;
SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
SVG_MORPHOLOGY_OPERATOR_ERODE: number;
SVG_MORPHOLOGY_OPERATOR_DILATE: number;
}
interface SVGFEFuncRElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncRElement: {
prototype: SVGFEFuncRElement;
new(): SVGFEFuncRElement;
}
interface WindowTimersExtension {
msSetImmediate(expression: any, ...args: any[]): number;
clearImmediate(handle: number): void;
msClearImmediate(handle: number): void;
setImmediate(expression: any, ...args: any[]): number;
}
interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in2: SVGAnimatedString;
xChannelSelector: SVGAnimatedEnumeration;
yChannelSelector: SVGAnimatedEnumeration;
scale: SVGAnimatedNumber;
in1: SVGAnimatedString;
SVG_CHANNEL_B: number;
SVG_CHANNEL_R: number;
SVG_CHANNEL_G: number;
SVG_CHANNEL_UNKNOWN: number;
SVG_CHANNEL_A: number;
}
declare var SVGFEDisplacementMapElement: {
prototype: SVGFEDisplacementMapElement;
new(): SVGFEDisplacementMapElement;
SVG_CHANNEL_B: number;
SVG_CHANNEL_R: number;
SVG_CHANNEL_G: number;
SVG_CHANNEL_UNKNOWN: number;
SVG_CHANNEL_A: number;
}
interface AnimationEvent extends Event {
animationName: string;
elapsedTime: number;
initAnimationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, animationNameArg: string, elapsedTimeArg: number): void;
}
declare var AnimationEvent: {
prototype: AnimationEvent;
new(): AnimationEvent;
}
interface SVGComponentTransferFunctionElement extends SVGElement {
tableValues: SVGAnimatedNumberList;
slope: SVGAnimatedNumber;
type: SVGAnimatedEnumeration;
exponent: SVGAnimatedNumber;
amplitude: SVGAnimatedNumber;
intercept: SVGAnimatedNumber;
offset: SVGAnimatedNumber;
SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
}
declare var SVGComponentTransferFunctionElement: {
prototype: SVGComponentTransferFunctionElement;
new(): SVGComponentTransferFunctionElement;
SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
}
interface MSRangeCollection {
length: number;
item(index: number): Range;
[index: number]: Range;
}
declare var MSRangeCollection: {
prototype: MSRangeCollection;
new(): MSRangeCollection;
}
interface SVGFEDistantLightElement extends SVGElement {
azimuth: SVGAnimatedNumber;
elevation: SVGAnimatedNumber;
}
declare var SVGFEDistantLightElement: {
prototype: SVGFEDistantLightElement;
new(): SVGFEDistantLightElement;
}
interface SVGFEFuncBElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncBElement: {
prototype: SVGFEFuncBElement;
new(): SVGFEFuncBElement;
}
interface IDBKeyRange {
upper: any;
upperOpen: boolean;
lower: any;
lowerOpen: boolean;
}
declare var IDBKeyRange: {
prototype: IDBKeyRange;
new(): IDBKeyRange;
bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange;
only(value: any): IDBKeyRange;
lowerBound(bound: any, open?: boolean): IDBKeyRange;
upperBound(bound: any, open?: boolean): IDBKeyRange;
}
interface WindowConsole {
console: Console;
}
interface IDBTransaction extends EventTarget {
oncomplete: (ev: Event) => any;
db: IDBDatabase;
mode: string;
error: DOMError;
onerror: (ev: ErrorEvent) => any;
onabort: (ev: UIEvent) => any;
abort(): void;
objectStore(name: string): IDBObjectStore;
READ_ONLY: string;
VERSION_CHANGE: string;
READ_WRITE: string;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBTransaction: {
prototype: IDBTransaction;
new(): IDBTransaction;
READ_ONLY: string;
VERSION_CHANGE: string;
READ_WRITE: string;
}
interface AudioTrack {
kind: string;
language: string;
id: string;
label: string;
enabled: boolean;
sourceBuffer: SourceBuffer;
}
declare var AudioTrack: {
prototype: AudioTrack;
new(): AudioTrack;
}
interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
orderY: SVGAnimatedInteger;
kernelUnitLengthY: SVGAnimatedNumber;
orderX: SVGAnimatedInteger;
preserveAlpha: SVGAnimatedBoolean;
kernelMatrix: SVGAnimatedNumberList;
edgeMode: SVGAnimatedEnumeration;
kernelUnitLengthX: SVGAnimatedNumber;
bias: SVGAnimatedNumber;
targetX: SVGAnimatedInteger;
targetY: SVGAnimatedInteger;
divisor: SVGAnimatedNumber;
in1: SVGAnimatedString;
SVG_EDGEMODE_WRAP: number;
SVG_EDGEMODE_DUPLICATE: number;
SVG_EDGEMODE_UNKNOWN: number;
SVG_EDGEMODE_NONE: number;
}
declare var SVGFEConvolveMatrixElement: {
prototype: SVGFEConvolveMatrixElement;
new(): SVGFEConvolveMatrixElement;
SVG_EDGEMODE_WRAP: number;
SVG_EDGEMODE_DUPLICATE: number;
SVG_EDGEMODE_UNKNOWN: number;
SVG_EDGEMODE_NONE: number;
}
interface TextTrackCueList {
length: number;
item(index: number): TextTrackCue;
[index: number]: TextTrackCue;
getCueById(id: string): TextTrackCue;
}
declare var TextTrackCueList: {
prototype: TextTrackCueList;
new(): TextTrackCueList;
}
interface CSSKeyframesRule extends CSSRule {
name: string;
cssRules: CSSRuleList;
findRule(rule: string): CSSKeyframeRule;
deleteRule(rule: string): void;
appendRule(rule: string): void;
}
declare var CSSKeyframesRule: {
prototype: CSSKeyframesRule;
new(): CSSKeyframesRule;
}
interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
baseFrequencyX: SVGAnimatedNumber;
numOctaves: SVGAnimatedInteger;
type: SVGAnimatedEnumeration;
baseFrequencyY: SVGAnimatedNumber;
stitchTiles: SVGAnimatedEnumeration;
seed: SVGAnimatedNumber;
SVG_STITCHTYPE_UNKNOWN: number;
SVG_STITCHTYPE_NOSTITCH: number;
SVG_TURBULENCE_TYPE_UNKNOWN: number;
SVG_TURBULENCE_TYPE_TURBULENCE: number;
SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
SVG_STITCHTYPE_STITCH: number;
}
declare var SVGFETurbulenceElement: {
prototype: SVGFETurbulenceElement;
new(): SVGFETurbulenceElement;
SVG_STITCHTYPE_UNKNOWN: number;
SVG_STITCHTYPE_NOSTITCH: number;
SVG_TURBULENCE_TYPE_UNKNOWN: number;
SVG_TURBULENCE_TYPE_TURBULENCE: number;
SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
SVG_STITCHTYPE_STITCH: number;
}
interface TextTrackList extends EventTarget {
length: number;
onaddtrack: (ev: TrackEvent) => any;
item(index: number): TextTrack;
[index: number]: TextTrack;
addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var TextTrackList: {
prototype: TextTrackList;
new(): TextTrackList;
}
interface SVGFEFuncGElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncGElement: {
prototype: SVGFEFuncGElement;
new(): SVGFEFuncGElement;
}
interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in1: SVGAnimatedString;
type: SVGAnimatedEnumeration;
values: SVGAnimatedNumberList;
SVG_FECOLORMATRIX_TYPE_SATURATE: number;
SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
SVG_FECOLORMATRIX_TYPE_MATRIX: number;
SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
}
declare var SVGFEColorMatrixElement: {
prototype: SVGFEColorMatrixElement;
new(): SVGFEColorMatrixElement;
SVG_FECOLORMATRIX_TYPE_SATURATE: number;
SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
SVG_FECOLORMATRIX_TYPE_MATRIX: number;
SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
}
interface SVGFESpotLightElement extends SVGElement {
pointsAtY: SVGAnimatedNumber;
y: SVGAnimatedNumber;
limitingConeAngle: SVGAnimatedNumber;
specularExponent: SVGAnimatedNumber;
x: SVGAnimatedNumber;
pointsAtZ: SVGAnimatedNumber;
z: SVGAnimatedNumber;
pointsAtX: SVGAnimatedNumber;
}
declare var SVGFESpotLightElement: {
prototype: SVGFESpotLightElement;
new(): SVGFESpotLightElement;
}
interface WindowBase64 {
btoa(rawString: string): string;
atob(encodedString: string): string;
}
interface IDBDatabase extends EventTarget {
version: string;
name: string;
objectStoreNames: DOMStringList;
onerror: (ev: ErrorEvent) => any;
onabort: (ev: UIEvent) => any;
createObjectStore(name: string, optionalParameters?: any): IDBObjectStore;
close(): void;
transaction(storeNames: any, mode?: string): IDBTransaction;
deleteObjectStore(name: string): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBDatabase: {
prototype: IDBDatabase;
new(): IDBDatabase;
}
interface DOMStringList {
length: number;
contains(str: string): boolean;
item(index: number): string;
[index: number]: string;
}
declare var DOMStringList: {
prototype: DOMStringList;
new(): DOMStringList;
}
interface IDBOpenDBRequest extends IDBRequest {
onupgradeneeded: (ev: IDBVersionChangeEvent) => any;
onblocked: (ev: Event) => any;
addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void;
addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBOpenDBRequest: {
prototype: IDBOpenDBRequest;
new(): IDBOpenDBRequest;
}
interface HTMLProgressElement extends HTMLElement {
/**
* Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value.
*/
value: number;
/**
* Defines the maximum, or "done" value for a progress element.
*/
max: number;
/**
* Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar).
*/
position: number;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
}
declare var HTMLProgressElement: {
prototype: HTMLProgressElement;
new(): HTMLProgressElement;
}
interface MSLaunchUriCallback {
(): void;
}
interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
dy: SVGAnimatedNumber;
in1: SVGAnimatedString;
dx: SVGAnimatedNumber;
}
declare var SVGFEOffsetElement: {
prototype: SVGFEOffsetElement;
new(): SVGFEOffsetElement;
}
interface MSUnsafeFunctionCallback {
(): any;
}
interface TextTrack extends EventTarget {
language: string;
mode: any;
readyState: number;
activeCues: TextTrackCueList;
cues: TextTrackCueList;
oncuechange: (ev: Event) => any;
kind: string;
onload: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
label: string;
addCue(cue: TextTrackCue): void;
removeCue(cue: TextTrackCue): void;
ERROR: number;
SHOWING: number;
LOADING: number;
LOADED: number;
NONE: number;
HIDDEN: number;
DISABLED: number;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var TextTrack: {
prototype: TextTrack;
new(): TextTrack;
ERROR: number;
SHOWING: number;
LOADING: number;
LOADED: number;
NONE: number;
HIDDEN: number;
DISABLED: number;
}
interface MediaQueryListListener {
(mql: MediaQueryList): void;
}
interface IDBRequest extends EventTarget {
source: any;
onsuccess: (ev: Event) => any;
error: DOMError;
transaction: IDBTransaction;
onerror: (ev: ErrorEvent) => any;
readyState: string;
result: any;
addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBRequest: {
prototype: IDBRequest;
new(): IDBRequest;
}
interface MessagePort extends EventTarget {
onmessage: (ev: MessageEvent) => any;
close(): void;
postMessage(message?: any, ports?: any): void;
start(): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MessagePort: {
prototype: MessagePort;
new(): MessagePort;
}
interface FileReader extends MSBaseReader {
error: DOMError;
readAsArrayBuffer(blob: Blob): void;
readAsDataURL(blob: Blob): void;
readAsText(blob: Blob, encoding?: string): void;
}
declare var FileReader: {
prototype: FileReader;
new(): FileReader;
}
interface ApplicationCache extends EventTarget {
status: number;
ondownloading: (ev: Event) => any;
onprogress: (ev: ProgressEvent) => any;
onupdateready: (ev: Event) => any;
oncached: (ev: Event) => any;
onobsolete: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
onchecking: (ev: Event) => any;
onnoupdate: (ev: Event) => any;
swapCache(): void;
abort(): void;
update(): void;
CHECKING: number;
UNCACHED: number;
UPDATEREADY: number;
DOWNLOADING: number;
IDLE: number;
OBSOLETE: number;
addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var ApplicationCache: {
prototype: ApplicationCache;
new(): ApplicationCache;
CHECKING: number;
UNCACHED: number;
UPDATEREADY: number;
DOWNLOADING: number;
IDLE: number;
OBSOLETE: number;
}
interface FrameRequestCallback {
(time: number): void;
}
interface PopStateEvent extends Event {
state: any;
initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void;
}
declare var PopStateEvent: {
prototype: PopStateEvent;
new(): PopStateEvent;
}
interface CSSKeyframeRule extends CSSRule {
keyText: string;
style: CSSStyleDeclaration;
}
declare var CSSKeyframeRule: {
prototype: CSSKeyframeRule;
new(): CSSKeyframeRule;
}
interface MSFileSaver {
msSaveBlob(blob: any, defaultName?: string): boolean;
msSaveOrOpenBlob(blob: any, defaultName?: string): boolean;
}
interface MSStream {
type: string;
msDetachStream(): any;
msClose(): void;
}
declare var MSStream: {
prototype: MSStream;
new(): MSStream;
}
interface MSBlobBuilder {
append(data: any, endings?: string): void;
getBlob(contentType?: string): Blob;
}
declare var MSBlobBuilder: {
prototype: MSBlobBuilder;
new(): MSBlobBuilder;
}
interface DOMSettableTokenList extends DOMTokenList {
value: string;
}
declare var DOMSettableTokenList: {
prototype: DOMSettableTokenList;
new(): DOMSettableTokenList;
}
interface IDBFactory {
open(name: string, version?: number): IDBOpenDBRequest;
cmp(first: any, second: any): number;
deleteDatabase(name: string): IDBOpenDBRequest;
}
declare var IDBFactory: {
prototype: IDBFactory;
new(): IDBFactory;
}
interface MSPointerEvent extends MouseEvent {
width: number;
rotation: number;
pressure: number;
pointerType: any;
isPrimary: boolean;
tiltY: number;
height: number;
intermediatePoints: any;
currentPoint: any;
tiltX: number;
hwTimestamp: number;
pointerId: number;
initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
getCurrentPoint(element: Element): void;
getIntermediatePoints(element: Element): void;
MSPOINTER_TYPE_PEN: number;
MSPOINTER_TYPE_MOUSE: number;
MSPOINTER_TYPE_TOUCH: number;
}
declare var MSPointerEvent: {
prototype: MSPointerEvent;
new(): MSPointerEvent;
MSPOINTER_TYPE_PEN: number;
MSPOINTER_TYPE_MOUSE: number;
MSPOINTER_TYPE_TOUCH: number;
}
interface MSManipulationEvent extends UIEvent {
lastState: number;
currentState: number;
initMSManipulationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, lastState: number, currentState: number): void;
MS_MANIPULATION_STATE_STOPPED: number;
MS_MANIPULATION_STATE_ACTIVE: number;
MS_MANIPULATION_STATE_INERTIA: number;
MS_MANIPULATION_STATE_SELECTING: number;
MS_MANIPULATION_STATE_COMMITTED: number;
MS_MANIPULATION_STATE_PRESELECT: number;
MS_MANIPULATION_STATE_DRAGGING: number;
MS_MANIPULATION_STATE_CANCELLED: number;
}
declare var MSManipulationEvent: {
prototype: MSManipulationEvent;
new(): MSManipulationEvent;
MS_MANIPULATION_STATE_STOPPED: number;
MS_MANIPULATION_STATE_ACTIVE: number;
MS_MANIPULATION_STATE_INERTIA: number;
MS_MANIPULATION_STATE_SELECTING: number;
MS_MANIPULATION_STATE_COMMITTED: number;
MS_MANIPULATION_STATE_PRESELECT: number;
MS_MANIPULATION_STATE_DRAGGING: number;
MS_MANIPULATION_STATE_CANCELLED: number;
}
interface FormData {
append(name: any, value: any, blobName?: string): void;
}
declare var FormData: {
prototype: FormData;
new(): FormData;
}
interface HTMLDataListElement extends HTMLElement {
options: HTMLCollection;
}
declare var HTMLDataListElement: {
prototype: HTMLDataListElement;
new(): HTMLDataListElement;
}
interface SVGFEImageElement extends SVGElement, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGURIReference, SVGExternalResourcesRequired {
preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
}
declare var SVGFEImageElement: {
prototype: SVGFEImageElement;
new(): SVGFEImageElement;
}
interface AbstractWorker extends EventTarget {
onerror: (ev: ErrorEvent) => any;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
operator: SVGAnimatedEnumeration;
in2: SVGAnimatedString;
k2: SVGAnimatedNumber;
k1: SVGAnimatedNumber;
k3: SVGAnimatedNumber;
in1: SVGAnimatedString;
k4: SVGAnimatedNumber;
SVG_FECOMPOSITE_OPERATOR_OUT: number;
SVG_FECOMPOSITE_OPERATOR_OVER: number;
SVG_FECOMPOSITE_OPERATOR_XOR: number;
SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
SVG_FECOMPOSITE_OPERATOR_IN: number;
SVG_FECOMPOSITE_OPERATOR_ATOP: number;
}
declare var SVGFECompositeElement: {
prototype: SVGFECompositeElement;
new(): SVGFECompositeElement;
SVG_FECOMPOSITE_OPERATOR_OUT: number;
SVG_FECOMPOSITE_OPERATOR_OVER: number;
SVG_FECOMPOSITE_OPERATOR_XOR: number;
SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
SVG_FECOMPOSITE_OPERATOR_IN: number;
SVG_FECOMPOSITE_OPERATOR_ATOP: number;
}
interface ValidityState {
customError: boolean;
valueMissing: boolean;
stepMismatch: boolean;
rangeUnderflow: boolean;
rangeOverflow: boolean;
typeMismatch: boolean;
patternMismatch: boolean;
tooLong: boolean;
valid: boolean;
}
declare var ValidityState: {
prototype: ValidityState;
new(): ValidityState;
}
interface HTMLTrackElement extends HTMLElement {
kind: string;
src: string;
srclang: string;
track: TextTrack;
label: string;
default: boolean;
readyState: number;
ERROR: number;
LOADING: number;
LOADED: number;
NONE: number;
}
declare var HTMLTrackElement: {
prototype: HTMLTrackElement;
new(): HTMLTrackElement;
ERROR: number;
LOADING: number;
LOADED: number;
NONE: number;
}
interface MSApp {
createFileFromStorageFile(storageFile: any): File;
createBlobFromRandomAccessStream(type: string, seeker: any): Blob;
createStreamFromInputStream(type: string, inputStream: any): MSStream;
terminateApp(exceptionObject: any): void;
createDataPackage(object: any): any;
execUnsafeLocalFunction(unsafeFunction: MSUnsafeFunctionCallback): any;
getHtmlPrintDocumentSource(htmlDoc: any): any;
addPublicLocalApplicationUri(uri: string): void;
createDataPackageFromSelection(): any;
getViewOpener(): MSAppView;
suppressSubdownloadCredentialPrompts(suppress: boolean): void;
execAsyncAtPriority(asynchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): void;
isTaskScheduledAtPriorityOrHigher(priority: string): boolean;
execAtPriority(synchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): any;
createNewView(uri: string): MSAppView;
getCurrentPriority(): string;
NORMAL: string;
HIGH: string;
IDLE: string;
CURRENT: string;
}
declare var MSApp: MSApp;
interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in1: SVGAnimatedString;
}
declare var SVGFEComponentTransferElement: {
prototype: SVGFEComponentTransferElement;
new(): SVGFEComponentTransferElement;
}
interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
kernelUnitLengthY: SVGAnimatedNumber;
surfaceScale: SVGAnimatedNumber;
in1: SVGAnimatedString;
kernelUnitLengthX: SVGAnimatedNumber;
diffuseConstant: SVGAnimatedNumber;
}
declare var SVGFEDiffuseLightingElement: {
prototype: SVGFEDiffuseLightingElement;
new(): SVGFEDiffuseLightingElement;
}
interface MSCSSMatrix {
m24: number;
m34: number;
a: number;
d: number;
m32: number;
m41: number;
m11: number;
f: number;
e: number;
m23: number;
m14: number;
m33: number;
m22: number;
m21: number;
c: number;
m12: number;
b: number;
m42: number;
m31: number;
m43: number;
m13: number;
m44: number;
multiply(secondMatrix: MSCSSMatrix): MSCSSMatrix;
skewY(angle: number): MSCSSMatrix;
setMatrixValue(value: string): void;
inverse(): MSCSSMatrix;
rotateAxisAngle(x: number, y: number, z: number, angle: number): MSCSSMatrix;
toString(): string;
rotate(angleX: number, angleY?: number, angleZ?: number): MSCSSMatrix;
translate(x: number, y: number, z?: number): MSCSSMatrix;
scale(scaleX: number, scaleY?: number, scaleZ?: number): MSCSSMatrix;
skewX(angle: number): MSCSSMatrix;
}
declare var MSCSSMatrix: {
prototype: MSCSSMatrix;
new(text?: string): MSCSSMatrix;
}
interface Worker extends AbstractWorker {
onmessage: (ev: MessageEvent) => any;
postMessage(message: any, ports?: any): void;
terminate(): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Worker: {
prototype: Worker;
new(stringUrl: string): Worker;
}
interface MSExecAtPriorityFunctionCallback {
(...args: any[]): any;
}
interface MSGraphicsTrust {
status: string;
constrictionActive: boolean;
}
declare var MSGraphicsTrust: {
prototype: MSGraphicsTrust;
new(): MSGraphicsTrust;
}
interface SubtleCrypto {
unwrapKey(wrappedKey: ArrayBufferView, keyAlgorithm: any, keyEncryptionKey: Key, extractable?: boolean, keyUsages?: string[]): KeyOperation;
encrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation;
importKey(format: string, keyData: ArrayBufferView, algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation;
wrapKey(key: Key, keyEncryptionKey: Key, keyWrappingAlgorithm: any): KeyOperation;
verify(algorithm: any, key: Key, signature: ArrayBufferView, buffer?: ArrayBufferView): CryptoOperation;
deriveKey(algorithm: any, baseKey: Key, derivedKeyType: any, extractable?: boolean, keyUsages?: string[]): KeyOperation;
digest(algorithm: any, buffer?: ArrayBufferView): CryptoOperation;
exportKey(format: string, key: Key): KeyOperation;
generateKey(algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation;
sign(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation;
decrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation;
}
declare var SubtleCrypto: {
prototype: SubtleCrypto;
new(): SubtleCrypto;
}
interface Crypto extends RandomSource {
subtle: SubtleCrypto;
}
declare var Crypto: {
prototype: Crypto;
new(): Crypto;
}
interface VideoPlaybackQuality {
totalFrameDelay: number;
creationTime: number;
totalVideoFrames: number;
droppedVideoFrames: number;
}
declare var VideoPlaybackQuality: {
prototype: VideoPlaybackQuality;
new(): VideoPlaybackQuality;
}
interface GlobalEventHandlers {
onpointerenter: (ev: PointerEvent) => any;
onpointerout: (ev: PointerEvent) => any;
onpointerdown: (ev: PointerEvent) => any;
onpointerup: (ev: PointerEvent) => any;
onpointercancel: (ev: PointerEvent) => any;
onpointerover: (ev: PointerEvent) => any;
onpointermove: (ev: PointerEvent) => any;
onpointerleave: (ev: PointerEvent) => any;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface Key {
algorithm: Algorithm;
type: string;
extractable: boolean;
keyUsage: string[];
}
declare var Key: {
prototype: Key;
new(): Key;
}
interface DeviceAcceleration {
y: number;
x: number;
z: number;
}
declare var DeviceAcceleration: {
prototype: DeviceAcceleration;
new(): DeviceAcceleration;
}
interface HTMLAllCollection extends HTMLCollection {
namedItem(name: string): Element;
// [name: string]: Element;
}
declare var HTMLAllCollection: {
prototype: HTMLAllCollection;
new(): HTMLAllCollection;
}
interface AesGcmEncryptResult {
ciphertext: ArrayBuffer;
tag: ArrayBuffer;
}
declare var AesGcmEncryptResult: {
prototype: AesGcmEncryptResult;
new(): AesGcmEncryptResult;
}
interface NavigationCompletedEvent extends NavigationEvent {
webErrorStatus: number;
isSuccess: boolean;
}
declare var NavigationCompletedEvent: {
prototype: NavigationCompletedEvent;
new(): NavigationCompletedEvent;
}
interface MutationRecord {
oldValue: string;
previousSibling: Node;
addedNodes: NodeList;
attributeName: string;
removedNodes: NodeList;
target: Node;
nextSibling: Node;
attributeNamespace: string;
type: string;
}
declare var MutationRecord: {
prototype: MutationRecord;
new(): MutationRecord;
}
interface MimeTypeArray {
length: number;
item(index: number): Plugin;
[index: number]: Plugin;
namedItem(type: string): Plugin;
// [type: string]: Plugin;
}
declare var MimeTypeArray: {
prototype: MimeTypeArray;
new(): MimeTypeArray;
}
interface KeyOperation extends EventTarget {
oncomplete: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
result: any;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var KeyOperation: {
prototype: KeyOperation;
new(): KeyOperation;
}
interface DOMStringMap {
}
declare var DOMStringMap: {
prototype: DOMStringMap;
new(): DOMStringMap;
}
interface DeviceOrientationEvent extends Event {
gamma: number;
alpha: number;
absolute: boolean;
beta: number;
initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void;
}
declare var DeviceOrientationEvent: {
prototype: DeviceOrientationEvent;
new(): DeviceOrientationEvent;
}
interface MSMediaKeys {
keySystem: string;
createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array): MSMediaKeySession;
}
declare var MSMediaKeys: {
prototype: MSMediaKeys;
new(keySystem: string): MSMediaKeys;
isTypeSupported(keySystem: string, type?: string): boolean;
}
interface MSMediaKeyMessageEvent extends Event {
destinationURL: string;
message: Uint8Array;
}
declare var MSMediaKeyMessageEvent: {
prototype: MSMediaKeyMessageEvent;
new(): MSMediaKeyMessageEvent;
}
interface MSHTMLWebViewElement extends HTMLElement {
documentTitle: string;
width: number;
src: string;
canGoForward: boolean;
height: number;
canGoBack: boolean;
navigateWithHttpRequestMessage(requestMessage: any): void;
goBack(): void;
navigate(uri: string): void;
stop(): void;
navigateToString(contents: string): void;
captureSelectedContentToDataPackageAsync(): MSWebViewAsyncOperation;
capturePreviewToBlobAsync(): MSWebViewAsyncOperation;
refresh(): void;
goForward(): void;
navigateToLocalStreamUri(source: string, streamResolver: any): void;
invokeScriptAsync(scriptName: string, ...args: any[]): MSWebViewAsyncOperation;
buildLocalStreamUri(contentIdentifier: string, relativePath: string): string;
}
declare var MSHTMLWebViewElement: {
prototype: MSHTMLWebViewElement;
new(): MSHTMLWebViewElement;
}
interface NavigationEvent extends Event {
uri: string;
}
declare var NavigationEvent: {
prototype: NavigationEvent;
new(): NavigationEvent;
}
interface RandomSource {
getRandomValues(array: ArrayBufferView): ArrayBufferView;
}
interface SourceBuffer extends EventTarget {
updating: boolean;
appendWindowStart: number;
appendWindowEnd: number;
buffered: TimeRanges;
timestampOffset: number;
audioTracks: AudioTrackList;
appendBuffer(data: ArrayBuffer): void;
remove(start: number, end: number): void;
abort(): void;
appendStream(stream: MSStream, maxSize?: number): void;
}
declare var SourceBuffer: {
prototype: SourceBuffer;
new(): SourceBuffer;
}
interface MSInputMethodContext extends EventTarget {
oncandidatewindowshow: (ev: any) => any;
target: HTMLElement;
compositionStartOffset: number;
oncandidatewindowhide: (ev: any) => any;
oncandidatewindowupdate: (ev: any) => any;
compositionEndOffset: number;
getCompositionAlternatives(): string[];
getCandidateWindowClientRect(): ClientRect;
hasComposition(): boolean;
isCandidateWindowVisible(): boolean;
addEventListener(type: "candidatewindowshow", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "candidatewindowhide", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "candidatewindowupdate", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MSInputMethodContext: {
prototype: MSInputMethodContext;
new(): MSInputMethodContext;
}
interface DeviceRotationRate {
gamma: number;
alpha: number;
beta: number;
}
declare var DeviceRotationRate: {
prototype: DeviceRotationRate;
new(): DeviceRotationRate;
}
interface PluginArray {
length: number;
refresh(reload?: boolean): void;
item(index: number): Plugin;
[index: number]: Plugin;
namedItem(name: string): Plugin;
// [name: string]: Plugin;
}
declare var PluginArray: {
prototype: PluginArray;
new(): PluginArray;
}
interface MSMediaKeyError {
systemCode: number;
code: number;
MS_MEDIA_KEYERR_SERVICE: number;
MS_MEDIA_KEYERR_HARDWARECHANGE: number;
MS_MEDIA_KEYERR_OUTPUT: number;
MS_MEDIA_KEYERR_DOMAIN: number;
MS_MEDIA_KEYERR_UNKNOWN: number;
MS_MEDIA_KEYERR_CLIENT: number;
}
declare var MSMediaKeyError: {
prototype: MSMediaKeyError;
new(): MSMediaKeyError;
MS_MEDIA_KEYERR_SERVICE: number;
MS_MEDIA_KEYERR_HARDWARECHANGE: number;
MS_MEDIA_KEYERR_OUTPUT: number;
MS_MEDIA_KEYERR_DOMAIN: number;
MS_MEDIA_KEYERR_UNKNOWN: number;
MS_MEDIA_KEYERR_CLIENT: number;
}
interface Plugin {
length: number;
filename: string;
version: string;
name: string;
description: string;
item(index: number): MimeType;
[index: number]: MimeType;
namedItem(type: string): MimeType;
// [type: string]: MimeType;
}
declare var Plugin: {
prototype: Plugin;
new(): Plugin;
}
interface MediaSource extends EventTarget {
sourceBuffers: SourceBufferList;
duration: number;
readyState: string;
activeSourceBuffers: SourceBufferList;
addSourceBuffer(type: string): SourceBuffer;
endOfStream(error?: string): void;
removeSourceBuffer(sourceBuffer: SourceBuffer): void;
}
declare var MediaSource: {
prototype: MediaSource;
new(): MediaSource;
isTypeSupported(type: string): boolean;
}
interface SourceBufferList extends EventTarget {
length: number;
item(index: number): SourceBuffer;
[index: number]: SourceBuffer;
}
declare var SourceBufferList: {
prototype: SourceBufferList;
new(): SourceBufferList;
}
interface XMLDocument extends Document {
}
declare var XMLDocument: {
prototype: XMLDocument;
new(): XMLDocument;
}
interface DeviceMotionEvent extends Event {
rotationRate: DeviceRotationRate;
acceleration: DeviceAcceleration;
interval: number;
accelerationIncludingGravity: DeviceAcceleration;
initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void;
}
declare var DeviceMotionEvent: {
prototype: DeviceMotionEvent;
new(): DeviceMotionEvent;
}
interface MimeType {
enabledPlugin: Plugin;
suffixes: string;
type: string;
description: string;
}
declare var MimeType: {
prototype: MimeType;
new(): MimeType;
}
interface PointerEvent extends MouseEvent {
width: number;
rotation: number;
pressure: number;
pointerType: any;
isPrimary: boolean;
tiltY: number;
height: number;
intermediatePoints: any;
currentPoint: any;
tiltX: number;
hwTimestamp: number;
pointerId: number;
initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
getCurrentPoint(element: Element): void;
getIntermediatePoints(element: Element): void;
}
declare var PointerEvent: {
prototype: PointerEvent;
new(): PointerEvent;
}
interface MSDocumentExtensions {
captureEvents(): void;
releaseEvents(): void;
}
interface MutationObserver {
observe(target: Node, options: MutationObserverInit): void;
takeRecords(): MutationRecord[];
disconnect(): void;
}
declare var MutationObserver: {
prototype: MutationObserver;
new (callback: (arr: MutationRecord[], observer: MutationObserver)=>any): MutationObserver;
}
interface MSWebViewAsyncOperation extends EventTarget {
target: MSHTMLWebViewElement;
oncomplete: (ev: Event) => any;
error: DOMError;
onerror: (ev: ErrorEvent) => any;
readyState: number;
type: number;
result: any;
start(): void;
ERROR: number;
TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
TYPE_INVOKE_SCRIPT: number;
COMPLETED: number;
TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
STARTED: number;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MSWebViewAsyncOperation: {
prototype: MSWebViewAsyncOperation;
new(): MSWebViewAsyncOperation;
ERROR: number;
TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
TYPE_INVOKE_SCRIPT: number;
COMPLETED: number;
TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
STARTED: number;
}
interface ScriptNotifyEvent extends Event {
value: string;
callingUri: string;
}
declare var ScriptNotifyEvent: {
prototype: ScriptNotifyEvent;
new(): ScriptNotifyEvent;
}
interface PerformanceNavigationTiming extends PerformanceEntry {
redirectStart: number;
domainLookupEnd: number;
responseStart: number;
domComplete: number;
domainLookupStart: number;
loadEventStart: number;
unloadEventEnd: number;
fetchStart: number;
requestStart: number;
domInteractive: number;
navigationStart: number;
connectEnd: number;
loadEventEnd: number;
connectStart: number;
responseEnd: number;
domLoading: number;
redirectEnd: number;
redirectCount: number;
unloadEventStart: number;
domContentLoadedEventStart: number;
domContentLoadedEventEnd: number;
type: string;
}
declare var PerformanceNavigationTiming: {
prototype: PerformanceNavigationTiming;
new(): PerformanceNavigationTiming;
}
interface MSMediaKeyNeededEvent extends Event {
initData: Uint8Array;
}
declare var MSMediaKeyNeededEvent: {
prototype: MSMediaKeyNeededEvent;
new(): MSMediaKeyNeededEvent;
}
interface LongRunningScriptDetectedEvent extends Event {
stopPageScriptExecution: boolean;
executionTime: number;
}
declare var LongRunningScriptDetectedEvent: {
prototype: LongRunningScriptDetectedEvent;
new(): LongRunningScriptDetectedEvent;
}
interface MSAppView {
viewId: number;
close(): void;
postMessage(message: any, targetOrigin: string, ports?: any): void;
}
declare var MSAppView: {
prototype: MSAppView;
new(): MSAppView;
}
interface PerfWidgetExternal {
maxCpuSpeed: number;
independentRenderingEnabled: boolean;
irDisablingContentString: string;
irStatusAvailable: boolean;
performanceCounter: number;
averagePaintTime: number;
activeNetworkRequestCount: number;
paintRequestsPerSecond: number;
extraInformationEnabled: boolean;
performanceCounterFrequency: number;
averageFrameTime: number;
repositionWindow(x: number, y: number): void;
getRecentMemoryUsage(last: number): any;
getMemoryUsage(): number;
resizeWindow(width: number, height: number): void;
getProcessCpuUsage(): number;
removeEventListener(eventType: string, callback: (ev: any) => any): void;
getRecentCpuUsage(last: number): any;
addEventListener(eventType: string, callback: (ev: any) => any): void;
getRecentFrames(last: number): any;
getRecentPaintRequests(last: number): any;
}
declare var PerfWidgetExternal: {
prototype: PerfWidgetExternal;
new(): PerfWidgetExternal;
}
interface PageTransitionEvent extends Event {
persisted: boolean;
}
declare var PageTransitionEvent: {
prototype: PageTransitionEvent;
new(): PageTransitionEvent;
}
interface MutationCallback {
(mutations: MutationRecord[], observer: MutationObserver): void;
}
interface HTMLDocument extends Document {
}
declare var HTMLDocument: {
prototype: HTMLDocument;
new(): HTMLDocument;
}
interface KeyPair {
privateKey: Key;
publicKey: Key;
}
declare var KeyPair: {
prototype: KeyPair;
new(): KeyPair;
}
interface MSMediaKeySession extends EventTarget {
sessionId: string;
error: MSMediaKeyError;
keySystem: string;
close(): void;
update(key: Uint8Array): void;
}
declare var MSMediaKeySession: {
prototype: MSMediaKeySession;
new(): MSMediaKeySession;
}
interface UnviewableContentIdentifiedEvent extends NavigationEvent {
referrer: string;
}
declare var UnviewableContentIdentifiedEvent: {
prototype: UnviewableContentIdentifiedEvent;
new(): UnviewableContentIdentifiedEvent;
}
interface CryptoOperation extends EventTarget {
algorithm: Algorithm;
oncomplete: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
onprogress: (ev: ProgressEvent) => any;
onabort: (ev: UIEvent) => any;
key: Key;
result: any;
abort(): void;
finish(): void;
process(buffer: ArrayBufferView): void;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var CryptoOperation: {
prototype: CryptoOperation;
new(): CryptoOperation;
}
interface WebGLTexture extends WebGLObject {
}
declare var WebGLTexture: {
prototype: WebGLTexture;
new(): WebGLTexture;
}
interface OES_texture_float {
}
declare var OES_texture_float: {
prototype: OES_texture_float;
new(): OES_texture_float;
}
interface WebGLContextEvent extends Event {
statusMessage: string;
}
declare var WebGLContextEvent: {
prototype: WebGLContextEvent;
new(): WebGLContextEvent;
}
interface WebGLRenderbuffer extends WebGLObject {
}
declare var WebGLRenderbuffer: {
prototype: WebGLRenderbuffer;
new(): WebGLRenderbuffer;
}
interface WebGLUniformLocation {
}
declare var WebGLUniformLocation: {
prototype: WebGLUniformLocation;
new(): WebGLUniformLocation;
}
interface WebGLActiveInfo {
name: string;
type: number;
size: number;
}
declare var WebGLActiveInfo: {
prototype: WebGLActiveInfo;
new(): WebGLActiveInfo;
}
interface WEBGL_compressed_texture_s3tc {
COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
COMPRESSED_RGB_S3TC_DXT1_EXT: number;
}
declare var WEBGL_compressed_texture_s3tc: {
prototype: WEBGL_compressed_texture_s3tc;
new(): WEBGL_compressed_texture_s3tc;
COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
COMPRESSED_RGB_S3TC_DXT1_EXT: number;
}
interface WebGLRenderingContext {
drawingBufferWidth: number;
drawingBufferHeight: number;
canvas: HTMLCanvasElement;
getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation;
bindTexture(target: number, texture: WebGLTexture): void;
bufferData(target: number, data: ArrayBufferView, usage: number): void;
bufferData(target: number, data: ArrayBuffer, usage: number): void;
bufferData(target: number, size: number, usage: number): void;
depthMask(flag: boolean): void;
getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;
vertexAttrib3fv(indx: number, values: number[]): void;
vertexAttrib3fv(indx: number, values: Float32Array): void;
linkProgram(program: WebGLProgram): void;
getSupportedExtensions(): string[];
bufferSubData(target: number, offset: number, data: ArrayBuffer): void;
bufferSubData(target: number, offset: number, data: ArrayBufferView): void;
vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void;
polygonOffset(factor: number, units: number): void;
blendColor(red: number, green: number, blue: number, alpha: number): void;
createTexture(): WebGLTexture;
hint(target: number, mode: number): void;
getVertexAttrib(index: number, pname: number): any;
enableVertexAttribArray(index: number): void;
depthRange(zNear: number, zFar: number): void;
cullFace(mode: number): void;
createFramebuffer(): WebGLFramebuffer;
uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void;
uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void;
framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void;
deleteFramebuffer(framebuffer: WebGLFramebuffer): void;
colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void;
uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void;
uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void;
getExtension(name: string): any;
createProgram(): WebGLProgram;
deleteShader(shader: WebGLShader): void;
getAttachedShaders(program: WebGLProgram): WebGLShader[];
enable(cap: number): void;
blendEquation(mode: number): void;
texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void;
createBuffer(): WebGLBuffer;
deleteTexture(texture: WebGLTexture): void;
useProgram(program: WebGLProgram): void;
vertexAttrib2fv(indx: number, values: number[]): void;
vertexAttrib2fv(indx: number, values: Float32Array): void;
checkFramebufferStatus(target: number): number;
frontFace(mode: number): void;
getBufferParameter(target: number, pname: number): any;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void;
copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void;
getVertexAttribOffset(index: number, pname: number): number;
disableVertexAttribArray(index: number): void;
blendFunc(sfactor: number, dfactor: number): void;
drawElements(mode: number, count: number, type: number, offset: number): void;
isFramebuffer(framebuffer: WebGLFramebuffer): boolean;
uniform3iv(location: WebGLUniformLocation, v: number[]): void;
uniform3iv(location: WebGLUniformLocation, v: Int32Array): void;
lineWidth(width: number): void;
getShaderInfoLog(shader: WebGLShader): string;
getTexParameter(target: number, pname: number): any;
getParameter(pname: number): any;
getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat;
getContextAttributes(): WebGLContextAttributes;
vertexAttrib1f(indx: number, x: number): void;
bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void;
compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void;
isContextLost(): boolean;
uniform1iv(location: WebGLUniformLocation, v: number[]): void;
uniform1iv(location: WebGLUniformLocation, v: Int32Array): void;
getRenderbufferParameter(target: number, pname: number): any;
uniform2fv(location: WebGLUniformLocation, v: number[]): void;
uniform2fv(location: WebGLUniformLocation, v: Float32Array): void;
isTexture(texture: WebGLTexture): boolean;
getError(): number;
shaderSource(shader: WebGLShader, source: string): void;
deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void;
stencilMask(mask: number): void;
bindBuffer(target: number, buffer: WebGLBuffer): void;
getAttribLocation(program: WebGLProgram, name: string): number;
uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void;
blendEquationSeparate(modeRGB: number, modeAlpha: number): void;
clear(mask: number): void;
blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void;
stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void;
readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
scissor(x: number, y: number, width: number, height: number): void;
uniform2i(location: WebGLUniformLocation, x: number, y: number): void;
getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo;
getShaderSource(shader: WebGLShader): string;
generateMipmap(target: number): void;
bindAttribLocation(program: WebGLProgram, index: number, name: string): void;
uniform1fv(location: WebGLUniformLocation, v: number[]): void;
uniform1fv(location: WebGLUniformLocation, v: Float32Array): void;
uniform2iv(location: WebGLUniformLocation, v: number[]): void;
uniform2iv(location: WebGLUniformLocation, v: Int32Array): void;
stencilOp(fail: number, zfail: number, zpass: number): void;
uniform4fv(location: WebGLUniformLocation, v: number[]): void;
uniform4fv(location: WebGLUniformLocation, v: Float32Array): void;
vertexAttrib1fv(indx: number, values: number[]): void;
vertexAttrib1fv(indx: number, values: Float32Array): void;
flush(): void;
uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
deleteProgram(program: WebGLProgram): void;
isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean;
uniform1i(location: WebGLUniformLocation, x: number): void;
getProgramParameter(program: WebGLProgram, pname: number): any;
getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo;
stencilFunc(func: number, ref: number, mask: number): void;
pixelStorei(pname: number, param: number): void;
disable(cap: number): void;
vertexAttrib4fv(indx: number, values: number[]): void;
vertexAttrib4fv(indx: number, values: Float32Array): void;
createRenderbuffer(): WebGLRenderbuffer;
isBuffer(buffer: WebGLBuffer): boolean;
stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void;
getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any;
uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
sampleCoverage(value: number, invert: boolean): void;
depthFunc(func: number): void;
texParameterf(target: number, pname: number, param: number): void;
vertexAttrib3f(indx: number, x: number, y: number, z: number): void;
drawArrays(mode: number, first: number, count: number): void;
texParameteri(target: number, pname: number, param: number): void;
vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void;
getShaderParameter(shader: WebGLShader, pname: number): any;
clearDepth(depth: number): void;
activeTexture(texture: number): void;
viewport(x: number, y: number, width: number, height: number): void;
detachShader(program: WebGLProgram, shader: WebGLShader): void;
uniform1f(location: WebGLUniformLocation, x: number): void;
uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void;
uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void;
deleteBuffer(buffer: WebGLBuffer): void;
copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void;
uniform3fv(location: WebGLUniformLocation, v: number[]): void;
uniform3fv(location: WebGLUniformLocation, v: Float32Array): void;
stencilMaskSeparate(face: number, mask: number): void;
attachShader(program: WebGLProgram, shader: WebGLShader): void;
compileShader(shader: WebGLShader): void;
clearColor(red: number, green: number, blue: number, alpha: number): void;
isShader(shader: WebGLShader): boolean;
clearStencil(s: number): void;
framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void;
finish(): void;
uniform2f(location: WebGLUniformLocation, x: number, y: number): void;
renderbufferStorage(target: number, internalformat: number, width: number, height: number): void;
uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void;
getProgramInfoLog(program: WebGLProgram): string;
validateProgram(program: WebGLProgram): void;
isEnabled(cap: number): boolean;
vertexAttrib2f(indx: number, x: number, y: number): void;
isProgram(program: WebGLProgram): boolean;
createShader(type: number): WebGLShader;
bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void;
uniform4iv(location: WebGLUniformLocation, v: number[]): void;
uniform4iv(location: WebGLUniformLocation, v: Int32Array): void;
DEPTH_FUNC: number;
DEPTH_COMPONENT16: number;
REPLACE: number;
REPEAT: number;
VERTEX_ATTRIB_ARRAY_ENABLED: number;
FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
STENCIL_BUFFER_BIT: number;
RENDERER: number;
STENCIL_BACK_REF: number;
TEXTURE26: number;
RGB565: number;
DITHER: number;
CONSTANT_COLOR: number;
GENERATE_MIPMAP_HINT: number;
POINTS: number;
DECR: number;
INT_VEC3: number;
TEXTURE28: number;
ONE_MINUS_CONSTANT_ALPHA: number;
BACK: number;
RENDERBUFFER_STENCIL_SIZE: number;
UNPACK_FLIP_Y_WEBGL: number;
BLEND: number;
TEXTURE9: number;
ARRAY_BUFFER_BINDING: number;
MAX_VIEWPORT_DIMS: number;
INVALID_FRAMEBUFFER_OPERATION: number;
TEXTURE: number;
TEXTURE0: number;
TEXTURE31: number;
TEXTURE24: number;
HIGH_INT: number;
RENDERBUFFER_BINDING: number;
BLEND_COLOR: number;
FASTEST: number;
STENCIL_WRITEMASK: number;
ALIASED_POINT_SIZE_RANGE: number;
TEXTURE12: number;
DST_ALPHA: number;
BLEND_EQUATION_RGB: number;
FRAMEBUFFER_COMPLETE: number;
NEAREST_MIPMAP_NEAREST: number;
VERTEX_ATTRIB_ARRAY_SIZE: number;
TEXTURE3: number;
DEPTH_WRITEMASK: number;
CONTEXT_LOST_WEBGL: number;
INVALID_VALUE: number;
TEXTURE_MAG_FILTER: number;
ONE_MINUS_CONSTANT_COLOR: number;
ONE_MINUS_SRC_ALPHA: number;
TEXTURE_CUBE_MAP_POSITIVE_Z: number;
NOTEQUAL: number;
ALPHA: number;
DEPTH_STENCIL: number;
MAX_VERTEX_UNIFORM_VECTORS: number;
DEPTH_COMPONENT: number;
RENDERBUFFER_RED_SIZE: number;
TEXTURE20: number;
RED_BITS: number;
RENDERBUFFER_BLUE_SIZE: number;
SCISSOR_BOX: number;
VENDOR: number;
FRONT_AND_BACK: number;
CONSTANT_ALPHA: number;
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
NEAREST: number;
CULL_FACE: number;
ALIASED_LINE_WIDTH_RANGE: number;
TEXTURE19: number;
FRONT: number;
DEPTH_CLEAR_VALUE: number;
GREEN_BITS: number;
TEXTURE29: number;
TEXTURE23: number;
MAX_RENDERBUFFER_SIZE: number;
STENCIL_ATTACHMENT: number;
TEXTURE27: number;
BOOL_VEC2: number;
OUT_OF_MEMORY: number;
MIRRORED_REPEAT: number;
POLYGON_OFFSET_UNITS: number;
TEXTURE_MIN_FILTER: number;
STENCIL_BACK_PASS_DEPTH_PASS: number;
LINE_LOOP: number;
FLOAT_MAT3: number;
TEXTURE14: number;
LINEAR: number;
RGB5_A1: number;
ONE_MINUS_SRC_COLOR: number;
SAMPLE_COVERAGE_INVERT: number;
DONT_CARE: number;
FRAMEBUFFER_BINDING: number;
RENDERBUFFER_ALPHA_SIZE: number;
STENCIL_REF: number;
ZERO: number;
DECR_WRAP: number;
SAMPLE_COVERAGE: number;
STENCIL_BACK_FUNC: number;
TEXTURE30: number;
VIEWPORT: number;
STENCIL_BITS: number;
FLOAT: number;
COLOR_WRITEMASK: number;
SAMPLE_COVERAGE_VALUE: number;
TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
STENCIL_BACK_FAIL: number;
FLOAT_MAT4: number;
UNSIGNED_SHORT_4_4_4_4: number;
TEXTURE6: number;
RENDERBUFFER_WIDTH: number;
RGBA4: number;
ALWAYS: number;
BLEND_EQUATION_ALPHA: number;
COLOR_BUFFER_BIT: number;
TEXTURE_CUBE_MAP: number;
DEPTH_BUFFER_BIT: number;
STENCIL_CLEAR_VALUE: number;
BLEND_EQUATION: number;
RENDERBUFFER_GREEN_SIZE: number;
NEAREST_MIPMAP_LINEAR: number;
VERTEX_ATTRIB_ARRAY_TYPE: number;
INCR_WRAP: number;
ONE_MINUS_DST_COLOR: number;
HIGH_FLOAT: number;
BYTE: number;
FRONT_FACE: number;
SAMPLE_ALPHA_TO_COVERAGE: number;
CCW: number;
TEXTURE13: number;
MAX_VERTEX_ATTRIBS: number;
MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_WRAP_T: number;
UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
FLOAT_VEC2: number;
LUMINANCE: number;
GREATER: number;
INT_VEC2: number;
VALIDATE_STATUS: number;
FRAMEBUFFER: number;
FRAMEBUFFER_UNSUPPORTED: number;
TEXTURE5: number;
FUNC_SUBTRACT: number;
BLEND_DST_ALPHA: number;
SAMPLER_CUBE: number;
ONE_MINUS_DST_ALPHA: number;
LESS: number;
TEXTURE_CUBE_MAP_POSITIVE_X: number;
BLUE_BITS: number;
DEPTH_TEST: number;
VERTEX_ATTRIB_ARRAY_STRIDE: number;
DELETE_STATUS: number;
TEXTURE18: number;
POLYGON_OFFSET_FACTOR: number;
UNSIGNED_INT: number;
TEXTURE_2D: number;
DST_COLOR: number;
FLOAT_MAT2: number;
COMPRESSED_TEXTURE_FORMATS: number;
MAX_FRAGMENT_UNIFORM_VECTORS: number;
DEPTH_STENCIL_ATTACHMENT: number;
LUMINANCE_ALPHA: number;
CW: number;
VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
LINEAR_MIPMAP_LINEAR: number;
BUFFER_SIZE: number;
SAMPLE_BUFFERS: number;
TEXTURE15: number;
ACTIVE_TEXTURE: number;
VERTEX_SHADER: number;
TEXTURE22: number;
VERTEX_ATTRIB_ARRAY_POINTER: number;
INCR: number;
COMPILE_STATUS: number;
MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
TEXTURE7: number;
UNSIGNED_SHORT_5_5_5_1: number;
DEPTH_BITS: number;
RGBA: number;
TRIANGLE_STRIP: number;
COLOR_CLEAR_VALUE: number;
BROWSER_DEFAULT_WEBGL: number;
INVALID_ENUM: number;
SCISSOR_TEST: number;
LINE_STRIP: number;
FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
STENCIL_FUNC: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
RENDERBUFFER_HEIGHT: number;
TEXTURE8: number;
TRIANGLES: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
STENCIL_BACK_VALUE_MASK: number;
TEXTURE25: number;
RENDERBUFFER: number;
LEQUAL: number;
TEXTURE1: number;
STENCIL_INDEX8: number;
FUNC_ADD: number;
STENCIL_FAIL: number;
BLEND_SRC_ALPHA: number;
BOOL: number;
ALPHA_BITS: number;
LOW_INT: number;
TEXTURE10: number;
SRC_COLOR: number;
MAX_VARYING_VECTORS: number;
BLEND_DST_RGB: number;
TEXTURE_BINDING_CUBE_MAP: number;
STENCIL_INDEX: number;
TEXTURE_BINDING_2D: number;
MEDIUM_INT: number;
SHADER_TYPE: number;
POLYGON_OFFSET_FILL: number;
DYNAMIC_DRAW: number;
TEXTURE4: number;
STENCIL_BACK_PASS_DEPTH_FAIL: number;
STREAM_DRAW: number;
MAX_CUBE_MAP_TEXTURE_SIZE: number;
TEXTURE17: number;
TRIANGLE_FAN: number;
UNPACK_ALIGNMENT: number;
CURRENT_PROGRAM: number;
LINES: number;
INVALID_OPERATION: number;
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
LINEAR_MIPMAP_NEAREST: number;
CLAMP_TO_EDGE: number;
RENDERBUFFER_DEPTH_SIZE: number;
TEXTURE_WRAP_S: number;
ELEMENT_ARRAY_BUFFER: number;
UNSIGNED_SHORT_5_6_5: number;
ACTIVE_UNIFORMS: number;
FLOAT_VEC3: number;
NO_ERROR: number;
ATTACHED_SHADERS: number;
DEPTH_ATTACHMENT: number;
TEXTURE11: number;
STENCIL_TEST: number;
ONE: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
STATIC_DRAW: number;
GEQUAL: number;
BOOL_VEC4: number;
COLOR_ATTACHMENT0: number;
PACK_ALIGNMENT: number;
MAX_TEXTURE_SIZE: number;
STENCIL_PASS_DEPTH_FAIL: number;
CULL_FACE_MODE: number;
TEXTURE16: number;
STENCIL_BACK_WRITEMASK: number;
SRC_ALPHA: number;
UNSIGNED_SHORT: number;
TEXTURE21: number;
FUNC_REVERSE_SUBTRACT: number;
SHADING_LANGUAGE_VERSION: number;
EQUAL: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
BOOL_VEC3: number;
SAMPLER_2D: number;
TEXTURE_CUBE_MAP_NEGATIVE_X: number;
MAX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_CUBE_MAP_POSITIVE_Y: number;
RENDERBUFFER_INTERNAL_FORMAT: number;
STENCIL_VALUE_MASK: number;
ELEMENT_ARRAY_BUFFER_BINDING: number;
ARRAY_BUFFER: number;
DEPTH_RANGE: number;
NICEST: number;
ACTIVE_ATTRIBUTES: number;
NEVER: number;
FLOAT_VEC4: number;
CURRENT_VERTEX_ATTRIB: number;
STENCIL_PASS_DEPTH_PASS: number;
INVERT: number;
LINK_STATUS: number;
RGB: number;
INT_VEC4: number;
TEXTURE2: number;
UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
MEDIUM_FLOAT: number;
SRC_ALPHA_SATURATE: number;
BUFFER_USAGE: number;
SHORT: number;
NONE: number;
UNSIGNED_BYTE: number;
INT: number;
SUBPIXEL_BITS: number;
KEEP: number;
SAMPLES: number;
FRAGMENT_SHADER: number;
LINE_WIDTH: number;
BLEND_SRC_RGB: number;
LOW_FLOAT: number;
VERSION: number;
}
declare var WebGLRenderingContext: {
prototype: WebGLRenderingContext;
new(): WebGLRenderingContext;
DEPTH_FUNC: number;
DEPTH_COMPONENT16: number;
REPLACE: number;
REPEAT: number;
VERTEX_ATTRIB_ARRAY_ENABLED: number;
FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
STENCIL_BUFFER_BIT: number;
RENDERER: number;
STENCIL_BACK_REF: number;
TEXTURE26: number;
RGB565: number;
DITHER: number;
CONSTANT_COLOR: number;
GENERATE_MIPMAP_HINT: number;
POINTS: number;
DECR: number;
INT_VEC3: number;
TEXTURE28: number;
ONE_MINUS_CONSTANT_ALPHA: number;
BACK: number;
RENDERBUFFER_STENCIL_SIZE: number;
UNPACK_FLIP_Y_WEBGL: number;
BLEND: number;
TEXTURE9: number;
ARRAY_BUFFER_BINDING: number;
MAX_VIEWPORT_DIMS: number;
INVALID_FRAMEBUFFER_OPERATION: number;
TEXTURE: number;
TEXTURE0: number;
TEXTURE31: number;
TEXTURE24: number;
HIGH_INT: number;
RENDERBUFFER_BINDING: number;
BLEND_COLOR: number;
FASTEST: number;
STENCIL_WRITEMASK: number;
ALIASED_POINT_SIZE_RANGE: number;
TEXTURE12: number;
DST_ALPHA: number;
BLEND_EQUATION_RGB: number;
FRAMEBUFFER_COMPLETE: number;
NEAREST_MIPMAP_NEAREST: number;
VERTEX_ATTRIB_ARRAY_SIZE: number;
TEXTURE3: number;
DEPTH_WRITEMASK: number;
CONTEXT_LOST_WEBGL: number;
INVALID_VALUE: number;
TEXTURE_MAG_FILTER: number;
ONE_MINUS_CONSTANT_COLOR: number;
ONE_MINUS_SRC_ALPHA: number;
TEXTURE_CUBE_MAP_POSITIVE_Z: number;
NOTEQUAL: number;
ALPHA: number;
DEPTH_STENCIL: number;
MAX_VERTEX_UNIFORM_VECTORS: number;
DEPTH_COMPONENT: number;
RENDERBUFFER_RED_SIZE: number;
TEXTURE20: number;
RED_BITS: number;
RENDERBUFFER_BLUE_SIZE: number;
SCISSOR_BOX: number;
VENDOR: number;
FRONT_AND_BACK: number;
CONSTANT_ALPHA: number;
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
NEAREST: number;
CULL_FACE: number;
ALIASED_LINE_WIDTH_RANGE: number;
TEXTURE19: number;
FRONT: number;
DEPTH_CLEAR_VALUE: number;
GREEN_BITS: number;
TEXTURE29: number;
TEXTURE23: number;
MAX_RENDERBUFFER_SIZE: number;
STENCIL_ATTACHMENT: number;
TEXTURE27: number;
BOOL_VEC2: number;
OUT_OF_MEMORY: number;
MIRRORED_REPEAT: number;
POLYGON_OFFSET_UNITS: number;
TEXTURE_MIN_FILTER: number;
STENCIL_BACK_PASS_DEPTH_PASS: number;
LINE_LOOP: number;
FLOAT_MAT3: number;
TEXTURE14: number;
LINEAR: number;
RGB5_A1: number;
ONE_MINUS_SRC_COLOR: number;
SAMPLE_COVERAGE_INVERT: number;
DONT_CARE: number;
FRAMEBUFFER_BINDING: number;
RENDERBUFFER_ALPHA_SIZE: number;
STENCIL_REF: number;
ZERO: number;
DECR_WRAP: number;
SAMPLE_COVERAGE: number;
STENCIL_BACK_FUNC: number;
TEXTURE30: number;
VIEWPORT: number;
STENCIL_BITS: number;
FLOAT: number;
COLOR_WRITEMASK: number;
SAMPLE_COVERAGE_VALUE: number;
TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
STENCIL_BACK_FAIL: number;
FLOAT_MAT4: number;
UNSIGNED_SHORT_4_4_4_4: number;
TEXTURE6: number;
RENDERBUFFER_WIDTH: number;
RGBA4: number;
ALWAYS: number;
BLEND_EQUATION_ALPHA: number;
COLOR_BUFFER_BIT: number;
TEXTURE_CUBE_MAP: number;
DEPTH_BUFFER_BIT: number;
STENCIL_CLEAR_VALUE: number;
BLEND_EQUATION: number;
RENDERBUFFER_GREEN_SIZE: number;
NEAREST_MIPMAP_LINEAR: number;
VERTEX_ATTRIB_ARRAY_TYPE: number;
INCR_WRAP: number;
ONE_MINUS_DST_COLOR: number;
HIGH_FLOAT: number;
BYTE: number;
FRONT_FACE: number;
SAMPLE_ALPHA_TO_COVERAGE: number;
CCW: number;
TEXTURE13: number;
MAX_VERTEX_ATTRIBS: number;
MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_WRAP_T: number;
UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
FLOAT_VEC2: number;
LUMINANCE: number;
GREATER: number;
INT_VEC2: number;
VALIDATE_STATUS: number;
FRAMEBUFFER: number;
FRAMEBUFFER_UNSUPPORTED: number;
TEXTURE5: number;
FUNC_SUBTRACT: number;
BLEND_DST_ALPHA: number;
SAMPLER_CUBE: number;
ONE_MINUS_DST_ALPHA: number;
LESS: number;
TEXTURE_CUBE_MAP_POSITIVE_X: number;
BLUE_BITS: number;
DEPTH_TEST: number;
VERTEX_ATTRIB_ARRAY_STRIDE: number;
DELETE_STATUS: number;
TEXTURE18: number;
POLYGON_OFFSET_FACTOR: number;
UNSIGNED_INT: number;
TEXTURE_2D: number;
DST_COLOR: number;
FLOAT_MAT2: number;
COMPRESSED_TEXTURE_FORMATS: number;
MAX_FRAGMENT_UNIFORM_VECTORS: number;
DEPTH_STENCIL_ATTACHMENT: number;
LUMINANCE_ALPHA: number;
CW: number;
VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
LINEAR_MIPMAP_LINEAR: number;
BUFFER_SIZE: number;
SAMPLE_BUFFERS: number;
TEXTURE15: number;
ACTIVE_TEXTURE: number;
VERTEX_SHADER: number;
TEXTURE22: number;
VERTEX_ATTRIB_ARRAY_POINTER: number;
INCR: number;
COMPILE_STATUS: number;
MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
TEXTURE7: number;
UNSIGNED_SHORT_5_5_5_1: number;
DEPTH_BITS: number;
RGBA: number;
TRIANGLE_STRIP: number;
COLOR_CLEAR_VALUE: number;
BROWSER_DEFAULT_WEBGL: number;
INVALID_ENUM: number;
SCISSOR_TEST: number;
LINE_STRIP: number;
FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
STENCIL_FUNC: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
RENDERBUFFER_HEIGHT: number;
TEXTURE8: number;
TRIANGLES: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
STENCIL_BACK_VALUE_MASK: number;
TEXTURE25: number;
RENDERBUFFER: number;
LEQUAL: number;
TEXTURE1: number;
STENCIL_INDEX8: number;
FUNC_ADD: number;
STENCIL_FAIL: number;
BLEND_SRC_ALPHA: number;
BOOL: number;
ALPHA_BITS: number;
LOW_INT: number;
TEXTURE10: number;
SRC_COLOR: number;
MAX_VARYING_VECTORS: number;
BLEND_DST_RGB: number;
TEXTURE_BINDING_CUBE_MAP: number;
STENCIL_INDEX: number;
TEXTURE_BINDING_2D: number;
MEDIUM_INT: number;
SHADER_TYPE: number;
POLYGON_OFFSET_FILL: number;
DYNAMIC_DRAW: number;
TEXTURE4: number;
STENCIL_BACK_PASS_DEPTH_FAIL: number;
STREAM_DRAW: number;
MAX_CUBE_MAP_TEXTURE_SIZE: number;
TEXTURE17: number;
TRIANGLE_FAN: number;
UNPACK_ALIGNMENT: number;
CURRENT_PROGRAM: number;
LINES: number;
INVALID_OPERATION: number;
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
LINEAR_MIPMAP_NEAREST: number;
CLAMP_TO_EDGE: number;
RENDERBUFFER_DEPTH_SIZE: number;
TEXTURE_WRAP_S: number;
ELEMENT_ARRAY_BUFFER: number;
UNSIGNED_SHORT_5_6_5: number;
ACTIVE_UNIFORMS: number;
FLOAT_VEC3: number;
NO_ERROR: number;
ATTACHED_SHADERS: number;
DEPTH_ATTACHMENT: number;
TEXTURE11: number;
STENCIL_TEST: number;
ONE: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
STATIC_DRAW: number;
GEQUAL: number;
BOOL_VEC4: number;
COLOR_ATTACHMENT0: number;
PACK_ALIGNMENT: number;
MAX_TEXTURE_SIZE: number;
STENCIL_PASS_DEPTH_FAIL: number;
CULL_FACE_MODE: number;
TEXTURE16: number;
STENCIL_BACK_WRITEMASK: number;
SRC_ALPHA: number;
UNSIGNED_SHORT: number;
TEXTURE21: number;
FUNC_REVERSE_SUBTRACT: number;
SHADING_LANGUAGE_VERSION: number;
EQUAL: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
BOOL_VEC3: number;
SAMPLER_2D: number;
TEXTURE_CUBE_MAP_NEGATIVE_X: number;
MAX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_CUBE_MAP_POSITIVE_Y: number;
RENDERBUFFER_INTERNAL_FORMAT: number;
STENCIL_VALUE_MASK: number;
ELEMENT_ARRAY_BUFFER_BINDING: number;
ARRAY_BUFFER: number;
DEPTH_RANGE: number;
NICEST: number;
ACTIVE_ATTRIBUTES: number;
NEVER: number;
FLOAT_VEC4: number;
CURRENT_VERTEX_ATTRIB: number;
STENCIL_PASS_DEPTH_PASS: number;
INVERT: number;
LINK_STATUS: number;
RGB: number;
INT_VEC4: number;
TEXTURE2: number;
UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
MEDIUM_FLOAT: number;
SRC_ALPHA_SATURATE: number;
BUFFER_USAGE: number;
SHORT: number;
NONE: number;
UNSIGNED_BYTE: number;
INT: number;
SUBPIXEL_BITS: number;
KEEP: number;
SAMPLES: number;
FRAGMENT_SHADER: number;
LINE_WIDTH: number;
BLEND_SRC_RGB: number;
LOW_FLOAT: number;
VERSION: number;
}
interface WebGLProgram extends WebGLObject {
}
declare var WebGLProgram: {
prototype: WebGLProgram;
new(): WebGLProgram;
}
interface OES_standard_derivatives {
FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
}
declare var OES_standard_derivatives: {
prototype: OES_standard_derivatives;
new(): OES_standard_derivatives;
FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
}
interface WebGLFramebuffer extends WebGLObject {
}
declare var WebGLFramebuffer: {
prototype: WebGLFramebuffer;
new(): WebGLFramebuffer;
}
interface WebGLShader extends WebGLObject {
}
declare var WebGLShader: {
prototype: WebGLShader;
new(): WebGLShader;
}
interface OES_texture_float_linear {
}
declare var OES_texture_float_linear: {
prototype: OES_texture_float_linear;
new(): OES_texture_float_linear;
}
interface WebGLObject {
}
declare var WebGLObject: {
prototype: WebGLObject;
new(): WebGLObject;
}
interface WebGLBuffer extends WebGLObject {
}
declare var WebGLBuffer: {
prototype: WebGLBuffer;
new(): WebGLBuffer;
}
interface WebGLShaderPrecisionFormat {
rangeMin: number;
rangeMax: number;
precision: number;
}
declare var WebGLShaderPrecisionFormat: {
prototype: WebGLShaderPrecisionFormat;
new(): WebGLShaderPrecisionFormat;
}
interface EXT_texture_filter_anisotropic {
TEXTURE_MAX_ANISOTROPY_EXT: number;
MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
}
declare var EXT_texture_filter_anisotropic: {
prototype: EXT_texture_filter_anisotropic;
new(): EXT_texture_filter_anisotropic;
TEXTURE_MAX_ANISOTROPY_EXT: number;
MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
}
declare var Option: { new(text?: string, value?: string, defaultSelected?: boolean, selected?:boolean): HTMLOptionElement; };
declare var Image: { new(width?: number, height?: number): HTMLImageElement; };
declare var Audio: { new(src?: string): HTMLAudioElement; };
declare var ondragend: (ev: DragEvent) => any;
declare var onkeydown: (ev: KeyboardEvent) => any;
declare var ondragover: (ev: DragEvent) => any;
declare var onkeyup: (ev: KeyboardEvent) => any;
declare var onreset: (ev: Event) => any;
declare var onmouseup: (ev: MouseEvent) => any;
declare var ondragstart: (ev: DragEvent) => any;
declare var ondrag: (ev: DragEvent) => any;
declare var screenX: number;
declare var onmouseover: (ev: MouseEvent) => any;
declare var ondragleave: (ev: DragEvent) => any;
declare var history: History;
declare var pageXOffset: number;
declare var name: string;
declare var onafterprint: (ev: Event) => any;
declare var onpause: (ev: Event) => any;
declare var onbeforeprint: (ev: Event) => any;
declare var top: Window;
declare var onmousedown: (ev: MouseEvent) => any;
declare var onseeked: (ev: Event) => any;
declare var opener: Window;
declare var onclick: (ev: MouseEvent) => any;
declare var innerHeight: number;
declare var onwaiting: (ev: Event) => any;
declare var ononline: (ev: Event) => any;
declare var ondurationchange: (ev: Event) => any;
declare var frames: Window;
declare var onblur: (ev: FocusEvent) => any;
declare var onemptied: (ev: Event) => any;
declare var onseeking: (ev: Event) => any;
declare var oncanplay: (ev: Event) => any;
declare var outerWidth: number;
declare var onstalled: (ev: Event) => any;
declare var onmousemove: (ev: MouseEvent) => any;
declare var innerWidth: number;
declare var onoffline: (ev: Event) => any;
declare var length: number;
declare var screen: Screen;
declare var onbeforeunload: (ev: BeforeUnloadEvent) => any;
declare var onratechange: (ev: Event) => any;
declare var onstorage: (ev: StorageEvent) => any;
declare var onloadstart: (ev: Event) => any;
declare var ondragenter: (ev: DragEvent) => any;
declare var onsubmit: (ev: Event) => any;
declare var self: Window;
declare var document: Document;
declare var onprogress: (ev: ProgressEvent) => any;
declare var ondblclick: (ev: MouseEvent) => any;
declare var pageYOffset: number;
declare var oncontextmenu: (ev: MouseEvent) => any;
declare var onchange: (ev: Event) => any;
declare var onloadedmetadata: (ev: Event) => any;
declare var onplay: (ev: Event) => any;
declare var onerror: ErrorEventHandler;
declare var onplaying: (ev: Event) => any;
declare var parent: Window;
declare var location: Location;
declare var oncanplaythrough: (ev: Event) => any;
declare var onabort: (ev: UIEvent) => any;
declare var onreadystatechange: (ev: Event) => any;
declare var outerHeight: number;
declare var onkeypress: (ev: KeyboardEvent) => any;
declare var frameElement: Element;
declare var onloadeddata: (ev: Event) => any;
declare var onsuspend: (ev: Event) => any;
declare var window: Window;
declare var onfocus: (ev: FocusEvent) => any;
declare var onmessage: (ev: MessageEvent) => any;
declare var ontimeupdate: (ev: Event) => any;
declare var onresize: (ev: UIEvent) => any;
declare var onselect: (ev: UIEvent) => any;
declare var navigator: Navigator;
declare var styleMedia: StyleMedia;
declare var ondrop: (ev: DragEvent) => any;
declare var onmouseout: (ev: MouseEvent) => any;
declare var onended: (ev: Event) => any;
declare var onhashchange: (ev: Event) => any;
declare var onunload: (ev: Event) => any;
declare var onscroll: (ev: UIEvent) => any;
declare var screenY: number;
declare var onmousewheel: (ev: MouseWheelEvent) => any;
declare var onload: (ev: Event) => any;
declare var onvolumechange: (ev: Event) => any;
declare var oninput: (ev: Event) => any;
declare var performance: Performance;
declare var onmspointerdown: (ev: any) => any;
declare var animationStartTime: number;
declare var onmsgesturedoubletap: (ev: any) => any;
declare var onmspointerhover: (ev: any) => any;
declare var onmsgesturehold: (ev: any) => any;
declare var onmspointermove: (ev: any) => any;
declare var onmsgesturechange: (ev: any) => any;
declare var onmsgesturestart: (ev: any) => any;
declare var onmspointercancel: (ev: any) => any;
declare var onmsgestureend: (ev: any) => any;
declare var onmsgesturetap: (ev: any) => any;
declare var onmspointerout: (ev: any) => any;
declare var msAnimationStartTime: number;
declare var applicationCache: ApplicationCache;
declare var onmsinertiastart: (ev: any) => any;
declare var onmspointerover: (ev: any) => any;
declare var onpopstate: (ev: PopStateEvent) => any;
declare var onmspointerup: (ev: any) => any;
declare var onpageshow: (ev: PageTransitionEvent) => any;
declare var ondevicemotion: (ev: DeviceMotionEvent) => any;
declare var devicePixelRatio: number;
declare var msCrypto: Crypto;
declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any;
declare var doNotTrack: string;
declare var onmspointerenter: (ev: any) => any;
declare var onpagehide: (ev: PageTransitionEvent) => any;
declare var onmspointerleave: (ev: any) => any;
declare function alert(message?: any): void;
declare function scroll(x?: number, y?: number): void;
declare function focus(): void;
declare function scrollTo(x?: number, y?: number): void;
declare function print(): void;
declare function prompt(message?: string, _default?: string): string;
declare function toString(): string;
declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window;
declare function scrollBy(x?: number, y?: number): void;
declare function confirm(message?: string): boolean;
declare function close(): void;
declare function postMessage(message: any, targetOrigin: string, ports?: any): void;
declare function showModalDialog(url?: string, argument?: any, options?: any): any;
declare function blur(): void;
declare function getSelection(): Selection;
declare function getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
declare function msCancelRequestAnimationFrame(handle: number): void;
declare function matchMedia(mediaQuery: string): MediaQueryList;
declare function cancelAnimationFrame(handle: number): void;
declare function msIsStaticHTML(html: string): boolean;
declare function msMatchMedia(mediaQuery: string): MediaQueryList;
declare function requestAnimationFrame(callback: FrameRequestCallback): number;
declare function msRequestAnimationFrame(callback: FrameRequestCallback): number;
declare function removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
declare function dispatchEvent(evt: Event): boolean;
declare function attachEvent(event: string, listener: EventListener): boolean;
declare function detachEvent(event: string, listener: EventListener): void;
declare var localStorage: Storage;
declare var status: string;
declare var onmouseleave: (ev: MouseEvent) => any;
declare var screenLeft: number;
declare var offscreenBuffering: any;
declare var maxConnectionsPerServer: number;
declare var onmouseenter: (ev: MouseEvent) => any;
declare var clipboardData: DataTransfer;
declare var defaultStatus: string;
declare var clientInformation: Navigator;
declare var closed: boolean;
declare var onhelp: (ev: Event) => any;
declare var external: External;
declare var event: MSEventObj;
declare var onfocusout: (ev: FocusEvent) => any;
declare var screenTop: number;
declare var onfocusin: (ev: FocusEvent) => any;
declare function showModelessDialog(url?: string, argument?: any, options?: any): Window;
declare function navigate(url: string): void;
declare function resizeBy(x?: number, y?: number): void;
declare function item(index: any): any;
declare function resizeTo(x?: number, y?: number): void;
declare function createPopup(arguments?: any): MSPopupWindow;
declare function toStaticHTML(html: string): string;
declare function execScript(code: string, language?: string): any;
declare function msWriteProfilerMark(profilerMarkName: string): void;
declare function moveTo(x?: number, y?: number): void;
declare function moveBy(x?: number, y?: number): void;
declare function showHelp(url: string, helpArg?: any, features?: string): void;
declare function captureEvents(): void;
declare function releaseEvents(): void;
declare var sessionStorage: Storage;
declare function clearTimeout(handle: number): void;
declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
declare function clearInterval(handle: number): void;
declare function setInterval(handler: any, timeout?: any, ...args: any[]): number;
declare function msSetImmediate(expression: any, ...args: any[]): number;
declare function clearImmediate(handle: number): void;
declare function msClearImmediate(handle: number): void;
declare function setImmediate(expression: any, ...args: any[]): number;
declare function btoa(rawString: string): string;
declare function atob(encodedString: string): string;
declare var msIndexedDB: IDBFactory;
declare var indexedDB: IDBFactory;
declare var console: Console;
declare var onpointerenter: (ev: PointerEvent) => any;
declare var onpointerout: (ev: PointerEvent) => any;
declare var onpointerdown: (ev: PointerEvent) => any;
declare var onpointerup: (ev: PointerEvent) => any;
declare var onpointercancel: (ev: PointerEvent) => any;
declare var onpointerover: (ev: PointerEvent) => any;
declare var onpointermove: (ev: PointerEvent) => any;
declare var onpointerleave: (ev: PointerEvent) => any;
declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
/////////////////////////////
/// WorkerGlobalScope APIs
/////////////////////////////
// These are only available in a Web Worker
declare function importScripts(...urls: string[]): void;
/////////////////////////////
/// Windows Script Host APIS
/////////////////////////////
declare var ActiveXObject: { new (s: string): any; };
interface ITextWriter {
Write(s: string): void;
WriteLine(s: string): void;
Close(): void;
}
declare var WScript: {
Echo(s: any): void;
StdErr: ITextWriter;
StdOut: ITextWriter;
Arguments: { length: number; Item(n: number): string; };
ScriptFullName: string;
Quit(exitCode?: number): number;
}
typescriptServices.js
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
var ts;
(function (ts) {
(function (EmitReturnStatus) {
EmitReturnStatus[EmitReturnStatus["Succeeded"] = 0] = "Succeeded";
EmitReturnStatus[EmitReturnStatus["AllOutputGenerationSkipped"] = 1] = "AllOutputGenerationSkipped";
EmitReturnStatus[EmitReturnStatus["JSGeneratedWithSemanticErrors"] = 2] = "JSGeneratedWithSemanticErrors";
EmitReturnStatus[EmitReturnStatus["DeclarationGenerationSkipped"] = 3] = "DeclarationGenerationSkipped";
EmitReturnStatus[EmitReturnStatus["EmitErrorsEncountered"] = 4] = "EmitErrorsEncountered";
EmitReturnStatus[EmitReturnStatus["CompilerOptionsErrors"] = 5] = "CompilerOptionsErrors";
})(ts.EmitReturnStatus || (ts.EmitReturnStatus = {}));
var EmitReturnStatus = ts.EmitReturnStatus;
(function (DiagnosticCategory) {
DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
})(ts.DiagnosticCategory || (ts.DiagnosticCategory = {}));
var DiagnosticCategory = ts.DiagnosticCategory;
})(ts || (ts = {}));
var ts;
(function (ts) {
function forEach(array, callback) {
var result;
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (result = callback(array[i])) {
break;
}
}
}
return result;
}
ts.forEach = forEach;
function contains(array, value) {
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === value) {
return true;
}
}
}
return false;
}
ts.contains = contains;
function indexOf(array, value) {
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === value) {
return i;
}
}
}
return -1;
}
ts.indexOf = indexOf;
function countWhere(array, predicate) {
var count = 0;
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (predicate(array[i])) {
count++;
}
}
}
return count;
}
ts.countWhere = countWhere;
function filter(array, f) {
if (array) {
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
var item = array[i];
if (f(item)) {
result.push(item);
}
}
}
return result;
}
ts.filter = filter;
function map(array, f) {
if (array) {
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
result.push(f(array[i]));
}
}
return result;
}
ts.map = map;
function concatenate(array1, array2) {
if (!array2 || !array2.length)
return array1;
if (!array1 || !array1.length)
return array2;
return array1.concat(array2);
}
ts.concatenate = concatenate;
function deduplicate(array) {
if (array) {
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
var item = array[i];
if (!contains(result, item))
result.push(item);
}
}
return result;
}
ts.deduplicate = deduplicate;
function sum(array, prop) {
var result = 0;
for (var i = 0; i < array.length; i++) {
result += array[i][prop];
}
return result;
}
ts.sum = sum;
function lastOrUndefined(array) {
if (array.length === 0) {
return undefined;
}
return array[array.length - 1];
}
ts.lastOrUndefined = lastOrUndefined;
function binarySearch(array, value) {
var low = 0;
var high = array.length - 1;
while (low <= high) {
var middle = low + ((high - low) >> 1);
var midValue = array[middle];
if (midValue === value) {
return middle;
}
else if (midValue > value) {
high = middle - 1;
}
else {
low = middle + 1;
}
}
return ~low;
}
ts.binarySearch = binarySearch;
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasProperty(map, key) {
return hasOwnProperty.call(map, key);
}
ts.hasProperty = hasProperty;
function getProperty(map, key) {
return hasOwnProperty.call(map, key) ? map[key] : undefined;
}
ts.getProperty = getProperty;
function isEmpty(map) {
for (var id in map) {
if (hasProperty(map, id)) {
return false;
}
}
return true;
}
ts.isEmpty = isEmpty;
function clone(object) {
var result = {};
for (var id in object) {
result[id] = object[id];
}
return result;
}
ts.clone = clone;
function forEachValue(map, callback) {
var result;
for (var id in map) {
if (result = callback(map[id]))
break;
}
return result;
}
ts.forEachValue = forEachValue;
function forEachKey(map, callback) {
var result;
for (var id in map) {
if (result = callback(id))
break;
}
return result;
}
ts.forEachKey = forEachKey;
function lookUp(map, key) {
return hasProperty(map, key) ? map[key] : undefined;
}
ts.lookUp = lookUp;
function mapToArray(map) {
var result = [];
for (var id in map) {
result.push(map[id]);
}
return result;
}
ts.mapToArray = mapToArray;
function arrayToMap(array, makeKey) {
var result = {};
forEach(array, function (value) {
result[makeKey(value)] = value;
});
return result;
}
ts.arrayToMap = arrayToMap;
function formatStringFromArgs(text, args, baseIndex) {
baseIndex = baseIndex || 0;
return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; });
}
ts.localizedDiagnosticMessages = undefined;
function getLocaleSpecificMessage(message) {
return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message] ? ts.localizedDiagnosticMessages[message] : message;
}
ts.getLocaleSpecificMessage = getLocaleSpecificMessage;
function createFileDiagnostic(file, start, length, message) {
Debug.assert(start >= 0, "start must be non-negative, is " + start);
Debug.assert(length >= 0, "length must be non-negative, is " + length);
var text = getLocaleSpecificMessage(message.key);
if (arguments.length > 4) {
text = formatStringFromArgs(text, arguments, 4);
}
return {
file: file,
start: start,
length: length,
messageText: text,
category: message.category,
code: message.code,
isEarly: message.isEarly
};
}
ts.createFileDiagnostic = createFileDiagnostic;
function createCompilerDiagnostic(message) {
var text = getLocaleSpecificMessage(message.key);
if (arguments.length > 1) {
text = formatStringFromArgs(text, arguments, 1);
}
return {
file: undefined,
start: undefined,
length: undefined,
messageText: text,
category: message.category,
code: message.code,
isEarly: message.isEarly
};
}
ts.createCompilerDiagnostic = createCompilerDiagnostic;
function chainDiagnosticMessages(details, message) {
var text = getLocaleSpecificMessage(message.key);
if (arguments.length > 2) {
text = formatStringFromArgs(text, arguments, 2);
}
return {
messageText: text,
category: message.category,
code: message.code,
next: details
};
}
ts.chainDiagnosticMessages = chainDiagnosticMessages;
function concatenateDiagnosticMessageChains(headChain, tailChain) {
Debug.assert(!headChain.next);
headChain.next = tailChain;
return headChain;
}
ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains;
function flattenDiagnosticChain(file, start, length, diagnosticChain, newLine) {
Debug.assert(start >= 0, "start must be non-negative, is " + start);
Debug.assert(length >= 0, "length must be non-negative, is " + length);
var code = diagnosticChain.code;
var category = diagnosticChain.category;
var messageText = "";
var indent = 0;
while (diagnosticChain) {
if (indent) {
messageText += newLine;
for (var i = 0; i < indent; i++) {
messageText += " ";
}
}
messageText += diagnosticChain.messageText;
indent++;
diagnosticChain = diagnosticChain.next;
}
return {
file: file,
start: start,
length: length,
code: code,
category: category,
messageText: messageText
};
}
ts.flattenDiagnosticChain = flattenDiagnosticChain;
function compareValues(a, b) {
if (a === b)
return 0 /* EqualTo */;
if (a === undefined)
return -1 /* LessThan */;
if (b === undefined)
return 1 /* GreaterThan */;
return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */;
}
ts.compareValues = compareValues;
function getDiagnosticFilename(diagnostic) {
return diagnostic.file ? diagnostic.file.filename : undefined;
}
function compareDiagnostics(d1, d2) {
return compareValues(getDiagnosticFilename(d1), getDiagnosticFilename(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareValues(d1.messageText, d2.messageText) || 0;
}
ts.compareDiagnostics = compareDiagnostics;
function deduplicateSortedDiagnostics(diagnostics) {
if (diagnostics.length < 2) {
return diagnostics;
}
var newDiagnostics = [diagnostics[0]];
var previousDiagnostic = diagnostics[0];
for (var i = 1; i < diagnostics.length; i++) {
var currentDiagnostic = diagnostics[i];
var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0 /* EqualTo */;
if (!isDupe) {
newDiagnostics.push(currentDiagnostic);
previousDiagnostic = currentDiagnostic;
}
}
return newDiagnostics;
}
ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics;
function normalizeSlashes(path) {
return path.replace(/\\/g, "/");
}
ts.normalizeSlashes = normalizeSlashes;
function getRootLength(path) {
if (path.charCodeAt(0) === 47 /* slash */) {
if (path.charCodeAt(1) !== 47 /* slash */)
return 1;
var p1 = path.indexOf("/", 2);
if (p1 < 0)
return 2;
var p2 = path.indexOf("/", p1 + 1);
if (p2 < 0)
return p1 + 1;
return p2 + 1;
}
if (path.charCodeAt(1) === 58 /* colon */) {
if (path.charCodeAt(2) === 47 /* slash */)
return 3;
return 2;
}
return 0;
}
ts.getRootLength = getRootLength;
ts.directorySeparator = "/";
function getNormalizedParts(normalizedSlashedPath, rootLength) {
var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator);
var normalized = [];
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part !== ".") {
if (part === ".." && normalized.length > 0 && normalized[normalized.length - 1] !== "..") {
normalized.pop();
}
else {
normalized.push(part);
}
}
}
return normalized;
}
function normalizePath(path) {
var path = normalizeSlashes(path);
var rootLength = getRootLength(path);
var normalized = getNormalizedParts(path, rootLength);
return path.substr(0, rootLength) + normalized.join(ts.directorySeparator);
}
ts.normalizePath = normalizePath;
function getDirectoryPath(path) {
return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator)));
}
ts.getDirectoryPath = getDirectoryPath;
function isUrl(path) {
return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1;
}
ts.isUrl = isUrl;
function isRootedDiskPath(path) {
return getRootLength(path) !== 0;
}
ts.isRootedDiskPath = isRootedDiskPath;
function normalizedPathComponents(path, rootLength) {
var normalizedParts = getNormalizedParts(path, rootLength);
return [path.substr(0, rootLength)].concat(normalizedParts);
}
function getNormalizedPathComponents(path, currentDirectory) {
var path = normalizeSlashes(path);
var rootLength = getRootLength(path);
if (rootLength == 0) {
path = combinePaths(normalizeSlashes(currentDirectory), path);
rootLength = getRootLength(path);
}
return normalizedPathComponents(path, rootLength);
}
ts.getNormalizedPathComponents = getNormalizedPathComponents;
function getNormalizedPathFromPathComponents(pathComponents) {
if (pathComponents && pathComponents.length) {
return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator);
}
}
ts.getNormalizedPathFromPathComponents = getNormalizedPathFromPathComponents;
function getNormalizedPathComponentsOfUrl(url) {
var urlLength = url.length;
var rootLength = url.indexOf("://") + "://".length;
while (rootLength < urlLength) {
if (url.charCodeAt(rootLength) === 47 /* slash */) {
rootLength++;
}
else {
break;
}
}
if (rootLength === urlLength) {
return [url];
}
var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength);
if (indexOfNextSlash !== -1) {
rootLength = indexOfNextSlash + 1;
return normalizedPathComponents(url, rootLength);
}
else {
return [url + ts.directorySeparator];
}
}
function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) {
if (isUrl(pathOrUrl)) {
return getNormalizedPathComponentsOfUrl(pathOrUrl);
}
else {
return getNormalizedPathComponents(pathOrUrl, currentDirectory);
}
}
function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) {
var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory);
var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory);
if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") {
directoryComponents.length--;
}
for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) {
if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) {
break;
}
}
if (joinStartIndex) {
var relativePath = "";
var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length);
for (; joinStartIndex < directoryComponents.length; joinStartIndex++) {
if (directoryComponents[joinStartIndex] !== "") {
relativePath = relativePath + ".." + ts.directorySeparator;
}
}
return relativePath + relativePathComponents.join(ts.directorySeparator);
}
var absolutePath = getNormalizedPathFromPathComponents(pathComponents);
if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) {
absolutePath = "file:///" + absolutePath;
}
return absolutePath;
}
ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
function getBaseFilename(path) {
var i = path.lastIndexOf(ts.directorySeparator);
return i < 0 ? path : path.substring(i + 1);
}
ts.getBaseFilename = getBaseFilename;
function combinePaths(path1, path2) {
if (!(path1 && path1.length))
return path2;
if (!(path2 && path2.length))
return path1;
if (path2.charAt(0) === ts.directorySeparator)
return path2;
if (path1.charAt(path1.length - 1) === ts.directorySeparator)
return path1 + path2;
return path1 + ts.directorySeparator + path2;
}
ts.combinePaths = combinePaths;
function fileExtensionIs(path, extension) {
var pathLen = path.length;
var extLen = extension.length;
return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension;
}
ts.fileExtensionIs = fileExtensionIs;
var supportedExtensions = [".d.ts", ".ts", ".js"];
function removeFileExtension(path) {
for (var i = 0; i < supportedExtensions.length; i++) {
var ext = supportedExtensions[i];
if (fileExtensionIs(path, ext)) {
return path.substr(0, path.length - ext.length);
}
}
return path;
}
ts.removeFileExtension = removeFileExtension;
var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\\\u2028\u2029\u0085]/g;
var escapedCharsMap = {
"\t": "\\t",
"\v": "\\v",
"\f": "\\f",
"\b": "\\b",
"\0": "\\0",
"\r": "\\r",
"\n": "\\n",
"\"": "\\\"",
"\u2028": "\\u2028",
"\u2029": "\\u2029",
"\u0085": "\\u0085"
};
function escapeString(s) {
return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, function (c) {
return escapedCharsMap[c] || c;
}) : s;
}
ts.escapeString = escapeString;
function Symbol(flags, name) {
this.flags = flags;
this.name = name;
this.declarations = undefined;
}
function Type(checker, flags) {
this.flags = flags;
}
function Signature(checker) {
}
ts.objectAllocator = {
getNodeConstructor: function (kind) {
function Node() {
}
Node.prototype = {
kind: kind,
pos: 0,
end: 0,
flags: 0,
parent: undefined
};
return Node;
},
getSymbolConstructor: function () { return Symbol; },
getTypeConstructor: function () { return Type; },
getSignatureConstructor: function () { return Signature; }
};
var Debug;
(function (Debug) {
var currentAssertionLevel = 0 /* None */;
function shouldAssert(level) {
return currentAssertionLevel >= level;
}
Debug.shouldAssert = shouldAssert;
function assert(expression, message, verboseDebugInfo) {
if (!expression) {
var verboseDebugString = "";
if (verboseDebugInfo) {
verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo();
}
throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString);
}
}
Debug.assert = assert;
function fail(message) {
Debug.assert(false, message);
}
Debug.fail = fail;
})(Debug = ts.Debug || (ts.Debug = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.Diagnostics = {
Unterminated_string_literal: { code: 1002, category: 1 /* Error */, key: "Unterminated string literal." },
Identifier_expected: { code: 1003, category: 1 /* Error */, key: "Identifier expected." },
_0_expected: { code: 1005, category: 1 /* Error */, key: "'{0}' expected." },
A_file_cannot_have_a_reference_to_itself: { code: 1006, category: 1 /* Error */, key: "A file cannot have a reference to itself." },
Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." },
Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." },
Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." },
Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." },
A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." },
Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer." },
A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter." },
An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter." },
An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier." },
An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark." },
An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer." },
An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." },
An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." },
An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." },
A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1 /* Error */, key: "A class or interface declaration can only have one 'extends' clause." },
An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1 /* Error */, key: "An 'extends' clause must precede an 'implements' clause." },
A_class_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "A class can only extend a single class." },
A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1 /* Error */, key: "A class declaration can only have one 'implements' clause." },
Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." },
_0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." },
_0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." },
_0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." },
An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1 /* Error */, key: "An interface declaration cannot have an 'implements' clause." },
super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1 /* Error */, key: "'super' must be followed by an argument list or member access." },
Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." },
Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." },
A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: 1 /* Error */, key: "A function implementation cannot be declared in an ambient context." },
A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context." },
Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts." },
_0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element." },
A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration." },
A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1 /* Error */, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." },
A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional." },
A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer." },
A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter." },
A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter." },
A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." },
A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." },
A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." },
Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." },
Enum_member_must_have_initializer: { code: 1061, category: 1 /* Error */, key: "Enum member must have initializer." },
An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." },
Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." },
Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." },
A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." },
Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." },
Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." },
An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context." },
_0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration." },
_0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter." },
Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement." },
Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration." },
Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration." },
An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters." },
A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation." },
An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter." },
_0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty." },
Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty." },
Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty." },
Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." },
with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." },
delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." },
A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." },
A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." },
Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." },
A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." },
Expression_expected: { code: 1109, category: 1 /* Error */, key: "Expression expected." },
Type_expected: { code: 1110, category: 1 /* Error */, key: "Type expected." },
A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: 1 /* Error */, key: "A constructor implementation cannot be declared in an ambient context." },
A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." },
A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." },
Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'" },
A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." },
A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement." },
An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode." },
An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name." },
An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." },
An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." },
Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1 /* Error */, key: "Octal literals are not allowed in strict mode." },
A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: 1 /* Error */, key: "A tuple type element list cannot be empty." },
Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1 /* Error */, key: "Variable declaration list cannot be empty." },
Digit_expected: { code: 1124, category: 1 /* Error */, key: "Digit expected." },
Hexadecimal_digit_expected: { code: 1125, category: 1 /* Error */, key: "Hexadecimal digit expected." },
Unexpected_end_of_text: { code: 1126, category: 1 /* Error */, key: "Unexpected end of text." },
Invalid_character: { code: 1127, category: 1 /* Error */, key: "Invalid character." },
Declaration_or_statement_expected: { code: 1128, category: 1 /* Error */, key: "Declaration or statement expected." },
Statement_expected: { code: 1129, category: 1 /* Error */, key: "Statement expected." },
case_or_default_expected: { code: 1130, category: 1 /* Error */, key: "'case' or 'default' expected." },
Property_or_signature_expected: { code: 1131, category: 1 /* Error */, key: "Property or signature expected." },
Enum_member_expected: { code: 1132, category: 1 /* Error */, key: "Enum member expected." },
Type_reference_expected: { code: 1133, category: 1 /* Error */, key: "Type reference expected." },
Variable_declaration_expected: { code: 1134, category: 1 /* Error */, key: "Variable declaration expected." },
Argument_expression_expected: { code: 1135, category: 1 /* Error */, key: "Argument expression expected." },
Property_assignment_expected: { code: 1136, category: 1 /* Error */, key: "Property assignment expected." },
Expression_or_comma_expected: { code: 1137, category: 1 /* Error */, key: "Expression or comma expected." },
Parameter_declaration_expected: { code: 1138, category: 1 /* Error */, key: "Parameter declaration expected." },
Type_parameter_declaration_expected: { code: 1139, category: 1 /* Error */, key: "Type parameter declaration expected." },
Type_argument_expected: { code: 1140, category: 1 /* Error */, key: "Type argument expected." },
String_literal_expected: { code: 1141, category: 1 /* Error */, key: "String literal expected." },
Line_break_not_permitted_here: { code: 1142, category: 1 /* Error */, key: "Line break not permitted here." },
catch_or_finally_expected: { code: 1143, category: 1 /* Error */, key: "'catch' or 'finally' expected." },
Block_or_expected: { code: 1144, category: 1 /* Error */, key: "Block or ';' expected." },
Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." },
Declaration_expected: { code: 1146, category: 1 /* Error */, key: "Declaration expected." },
Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." },
Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." },
Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: 1149, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" },
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
var_let_or_const_expected: { code: 1152, category: 1 /* Error */, key: "'var', 'let' or 'const' expected." },
let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: 1 /* Error */, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." },
const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: 1 /* Error */, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." },
const_declarations_must_be_initialized: { code: 1155, category: 1 /* Error */, key: "'const' declarations must be initialized" },
const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: 1 /* Error */, key: "'const' declarations can only be declared inside a block." },
let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: 1 /* Error */, key: "'let' declarations can only be declared inside a block." },
Invalid_template_literal_expected: { code: 1158, category: 1 /* Error */, key: "Invalid template literal; expected '}'" },
Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: 1 /* Error */, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." },
Duplicate_identifier_0: { code: 2300, category: 1 /* Error */, key: "Duplicate identifier '{0}'." },
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." },
Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1 /* Error */, key: "Static members cannot reference class type parameters." },
Circular_definition_of_import_alias_0: { code: 2303, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." },
Cannot_find_name_0: { code: 2304, category: 1 /* Error */, key: "Cannot find name '{0}'." },
Module_0_has_no_exported_member_1: { code: 2305, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." },
File_0_is_not_an_external_module: { code: 2306, category: 1 /* Error */, key: "File '{0}' is not an external module." },
Cannot_find_external_module_0: { code: 2307, category: 1 /* Error */, key: "Cannot find external module '{0}'." },
A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1 /* Error */, key: "A module cannot have more than one export assignment." },
An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." },
Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." },
A_class_may_only_extend_another_class: { code: 2311, category: 1 /* Error */, key: "A class may only extend another class." },
An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1 /* Error */, key: "An interface may only extend a class or another interface." },
Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." },
Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." },
Type_0_is_not_generic: { code: 2315, category: 1 /* Error */, key: "Type '{0}' is not generic." },
Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." },
Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." },
Cannot_find_global_type_0: { code: 2318, category: 1 /* Error */, key: "Cannot find global type '{0}'." },
Named_properties_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1 /* Error */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." },
Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." },
Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." },
Type_0_is_not_assignable_to_type_1: { code: 2322, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." },
Property_0_is_missing_in_type_1: { code: 2324, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." },
Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: 1 /* Error */, key: "Property '{0}' is private in type '{1}' but not in type '{2}'." },
Types_of_property_0_are_incompatible: { code: 2326, category: 1 /* Error */, key: "Types of property '{0}' are incompatible." },
Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: 1 /* Error */, key: "Property '{0}' is optional in type '{1}' but required in type '{2}'." },
Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible." },
Index_signature_is_missing_in_type_0: { code: 2329, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." },
Index_signatures_are_incompatible: { code: 2330, category: 1 /* Error */, key: "Index signatures are incompatible." },
this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." },
this_cannot_be_referenced_in_current_location: { code: 2332, category: 1 /* Error */, key: "'this' cannot be referenced in current location." },
this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." },
this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." },
super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." },
super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." },
Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" },
super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" },
Property_0_does_not_exist_on_type_1: { code: 2339, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." },
Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1 /* Error */, key: "Only public and protected methods of the base class are accessible via the 'super' keyword" },
Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: 1 /* Error */, key: "Property '{0}' is private and only accessible within class '{1}'." },
An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 2342, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." },
Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." },
Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." },
Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." },
Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." },
Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" },
Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." },
Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." },
Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." },
Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." },
No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1 /* Error */, key: "No best common type exists among return expressions." },
A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." },
An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." },
The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." },
The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." },
The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." },
The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2360, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." },
The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" },
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." },
Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." },
Type_parameter_name_cannot_be_0: { code: 2368, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" },
A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." },
A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1 /* Error */, key: "A rest parameter must be of an array type." },
A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." },
Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." },
Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." },
Duplicate_string_index_signature: { code: 2374, category: 1 /* Error */, key: "Duplicate string index signature." },
Duplicate_number_index_signature: { code: 2375, category: 1 /* Error */, key: "Duplicate number index signature." },
A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." },
Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." },
A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." },
Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." },
get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." },
A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." },
Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." },
Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." },
Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." },
Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: 1 /* Error */, key: "Overload signatures must all be public, private or protected." },
Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1 /* Error */, key: "Overload signatures must all be optional or required." },
Function_overload_must_be_static: { code: 2387, category: 1 /* Error */, key: "Function overload must be static." },
Function_overload_must_not_be_static: { code: 2388, category: 1 /* Error */, key: "Function overload must not be static." },
Function_implementation_name_must_be_0: { code: 2389, category: 1 /* Error */, key: "Function implementation name must be '{0}'." },
Constructor_implementation_is_missing: { code: 2390, category: 1 /* Error */, key: "Constructor implementation is missing." },
Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." },
Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." },
Duplicate_function_implementation: { code: 2393, category: 1 /* Error */, key: "Duplicate function implementation." },
Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." },
Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." },
Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." },
Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2397, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." },
Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2398, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." },
Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." },
Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." },
Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." },
Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." },
Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." },
The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." },
The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." },
Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." },
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." },
Setters_cannot_return_a_value: { code: 2408, category: 1 /* Error */, key: "Setters cannot return a value." },
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" },
All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." },
Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." },
Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." },
Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." },
Class_name_cannot_be_0: { code: 2414, category: 1 /* Error */, key: "Class name cannot be '{0}'" },
Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." },
Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." },
Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." },
Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." },
A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1 /* Error */, key: "A class may only implement another class or interface." },
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." },
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1 /* Error */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." },
Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1 /* Error */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." },
Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1 /* Error */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." },
Interface_name_cannot_be_0: { code: 2427, category: 1 /* Error */, key: "Interface name cannot be '{0}'" },
All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." },
Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." },
Enum_name_cannot_be_0: { code: 2431, category: 1 /* Error */, key: "Enum name cannot be '{0}'" },
In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." },
A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" },
A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" },
Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." },
Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." },
Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" },
Import_name_cannot_be_0: { code: 2438, category: 1 /* Error */, key: "Import name cannot be '{0}'" },
Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." },
Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" },
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: { code: 2441, category: 1 /* Error */, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module." },
Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: 1 /* Error */, key: "Types have separate declarations of a private property '{0}'." },
Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: 1 /* Error */, key: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." },
Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: 1 /* Error */, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." },
Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: 1 /* Error */, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." },
Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: 1 /* Error */, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." },
The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: 1 /* Error */, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." },
Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: 1 /* Error */, key: "Block-scoped variable '{0}' used before its declaration.", isEarly: true },
The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: 1 /* Error */, key: "The operand of an increment or decrement operator cannot be a constant.", isEarly: true },
Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: 1 /* Error */, key: "Left-hand side of assignment expression cannot be a constant.", isEarly: true },
Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: 1 /* Error */, key: "Cannot redeclare block-scoped variable '{0}'.", isEarly: true },
An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: 1 /* Error */, key: "An enum member cannot have a numeric name." },
The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: 1 /* Error */, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." },
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1 /* Error */, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
Type_alias_0_circularly_references_itself: { code: 2456, category: 1 /* Error */, key: "Type alias '{0}' circularly references itself." },
Type_alias_name_cannot_be_0: { code: 2457, category: 1 /* Error */, key: "Type alias name cannot be '{0}'" },
Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1 /* Error */, key: "Import declaration '{0}' is using private name '{1}'." },
Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1 /* Error */, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4003, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: 1 /* Error */, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." },
Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4005, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: 1 /* Error */, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4007, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: 1 /* Error */, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4009, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: 1 /* Error */, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4011, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: 1 /* Error */, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." },
Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4013, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: 1 /* Error */, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." },
Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4015, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." },
Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: 1 /* Error */, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." },
Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4017, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." },
Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 4018, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." },
Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: 1 /* Error */, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." },
Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: 1 /* Error */, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." },
Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 4021, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." },
Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: 1 /* Error */, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." },
Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." },
Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: 1 /* Error */, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." },
Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1 /* Error */, key: "Exported variable '{0}' has or is using private name '{1}'." },
Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1 /* Error */, key: "Public static property '{0}' of exported class has or is using private name '{1}'." },
Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1 /* Error */, key: "Public property '{0}' of exported class has or is using private name '{1}'." },
Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." },
Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1 /* Error */, key: "Property '{0}' of exported interface has or is using private name '{1}'." },
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1 /* Error */, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." },
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1 /* Error */, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." },
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1 /* Error */, key: "Return type of public static property getter from exported class has or is using private name '{0}'." },
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1 /* Error */, key: "Return type of public property getter from exported class has or is using private name '{0}'." },
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1 /* Error */, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." },
Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1 /* Error */, key: "Return type of call signature from exported interface has or is using private name '{0}'." },
Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1 /* Error */, key: "Return type of index signature from exported interface has or is using private name '{0}'." },
Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1 /* Error */, key: "Return type of public static method from exported class has or is using private name '{0}'." },
Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1 /* Error */, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1 /* Error */, key: "Return type of public method from exported class has or is using private name '{0}'." },
Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1 /* Error */, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1 /* Error */, key: "Return type of method from exported interface has or is using private name '{0}'." },
Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1 /* Error */, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." },
Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1 /* Error */, key: "Return type of exported function has or is using private name '{0}'." },
Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1 /* Error */, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." },
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1 /* Error */, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1 /* Error */, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1 /* Error */, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1 /* Error */, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." },
Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1 /* Error */, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." },
Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: 1 /* Error */, key: "Parameter '{0}' of exported function has or is using private name '{1}'." },
Exported_type_alias_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4079, category: 1 /* Error */, key: "Exported type alias '{0}' has or is using name '{1}' from external module {2} but cannot be named." },
Exported_type_alias_0_has_or_is_using_name_1_from_private_module_2: { code: 4080, category: 1 /* Error */, key: "Exported type alias '{0}' has or is using name '{1}' from private module '{2}'." },
Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: 1 /* Error */, key: "Exported type alias '{0}' has or is using private name '{1}'." },
Enum_declarations_must_all_be_const_or_non_const: { code: 4082, category: 1 /* Error */, key: "Enum declarations must all be const or non-const." },
In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 4083, category: 1 /* Error */, key: "In 'const' enum declarations member initializer must be constant expression.", isEarly: true },
const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 4084, category: 1 /* Error */, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." },
Index_expression_arguments_in_const_enums_must_be_of_type_string: { code: 4085, category: 1 /* Error */, key: "Index expression arguments in 'const' enums must be of type 'string'." },
const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 4086, category: 1 /* Error */, key: "'const' enum member initializer was evaluated to a non-finite value." },
const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 4087, category: 1 /* Error */, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." },
The_current_host_does_not_support_the_0_option: { code: 5001, category: 1 /* Error */, key: "The current host does not support the '{0}' option." },
Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." },
Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" },
Unsupported_file_encoding: { code: 5013, category: 1 /* Error */, key: "Unsupported file encoding." },
Unknown_compiler_option_0: { code: 5023, category: 1 /* Error */, key: "Unknown compiler option '{0}'." },
Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" },
Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option mapRoot cannot be specified without specifying sourcemap option." },
Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option sourceRoot cannot be specified without specifying sourcemap option." },
Concatenate_and_emit_output_to_single_file: { code: 6001, category: 2 /* Message */, key: "Concatenate and emit output to single file." },
Generates_corresponding_d_ts_file: { code: 6002, category: 2 /* Message */, key: "Generates corresponding '.d.ts' file." },
Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: 2 /* Message */, key: "Specifies the location where debugger should locate map files instead of generated locations." },
Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: 2 /* Message */, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." },
Watch_input_files: { code: 6005, category: 2 /* Message */, key: "Watch input files." },
Redirect_output_structure_to_the_directory: { code: 6006, category: 2 /* Message */, key: "Redirect output structure to the directory." },
Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: 2 /* Message */, key: "Do not erase const enum declarations in generated code." },
Do_not_emit_comments_to_output: { code: 6009, category: 2 /* Message */, key: "Do not emit comments to output." },
Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: 2 /* Message */, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" },
Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2 /* Message */, key: "Specify module code generation: 'commonjs' or 'amd'" },
Print_this_message: { code: 6017, category: 2 /* Message */, key: "Print this message." },
Print_the_compiler_s_version: { code: 6019, category: 2 /* Message */, key: "Print the compiler's version." },
Syntax_Colon_0: { code: 6023, category: 2 /* Message */, key: "Syntax: {0}" },
options: { code: 6024, category: 2 /* Message */, key: "options" },
file: { code: 6025, category: 2 /* Message */, key: "file" },
Examples_Colon_0: { code: 6026, category: 2 /* Message */, key: "Examples: {0}" },
Options_Colon: { code: 6027, category: 2 /* Message */, key: "Options:" },
Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" },
Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2 /* Message */, key: "Insert command line options and files from a file." },
File_change_detected_Compiling: { code: 6032, category: 2 /* Message */, key: "File change detected. Compiling..." },
KIND: { code: 6034, category: 2 /* Message */, key: "KIND" },
FILE: { code: 6035, category: 2 /* Message */, key: "FILE" },
VERSION: { code: 6036, category: 2 /* Message */, key: "VERSION" },
LOCATION: { code: 6037, category: 2 /* Message */, key: "LOCATION" },
DIRECTORY: { code: 6038, category: 2 /* Message */, key: "DIRECTORY" },
Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2 /* Message */, key: "Compilation complete. Watching for file changes." },
Generates_corresponding_map_file: { code: 6043, category: 2 /* Message */, key: "Generates corresponding '.map' file." },
Compiler_option_0_expects_an_argument: { code: 6044, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." },
Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." },
Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." },
Argument_for_target_option_must_be_es3_es5_or_es6: { code: 6047, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3', 'es5', or 'es6'." },
Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1 /* Error */, key: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'." },
Unsupported_locale_0: { code: 6049, category: 1 /* Error */, key: "Unsupported locale '{0}'." },
Unable_to_open_file_0: { code: 6050, category: 1 /* Error */, key: "Unable to open file '{0}'." },
Corrupted_locale_file_0: { code: 6051, category: 1 /* Error */, key: "Corrupted locale file {0}." },
Warn_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2 /* Message */, key: "Warn on expressions and declarations with an implied 'any' type." },
File_0_not_found: { code: 6053, category: 1 /* Error */, key: "File '{0}' not found." },
File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." },
Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." },
Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." },
Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." },
new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1 /* Error */, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." },
_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." },
Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." },
Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." },
Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." },
Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." },
Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." },
Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." },
Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." },
_0_implicitly_has_type_any_because_it_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 7021, category: 1 /* Error */, key: "'{0}' implicitly has type 'any' because it is referenced directly or indirectly in its own type annotation." },
_0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: 1 /* Error */, key: "'{0}' implicitly has type 'any' because it is does not have a type annotation and is referenced directly or indirectly in its own initializer." },
_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: 1 /* Error */, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: 1 /* Error */, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
You_cannot_rename_this_element: { code: 8000, category: 1 /* Error */, key: "You cannot rename this element." }
};
})(ts || (ts = {}));
var ts;
(function (ts) {
var textToToken = {
"any": 109 /* AnyKeyword */,
"boolean": 110 /* BooleanKeyword */,
"break": 64 /* BreakKeyword */,
"case": 65 /* CaseKeyword */,
"catch": 66 /* CatchKeyword */,
"class": 67 /* ClassKeyword */,
"continue": 69 /* ContinueKeyword */,
"const": 68 /* ConstKeyword */,
"constructor": 111 /* ConstructorKeyword */,
"debugger": 70 /* DebuggerKeyword */,
"declare": 112 /* DeclareKeyword */,
"default": 71 /* DefaultKeyword */,
"delete": 72 /* DeleteKeyword */,
"do": 73 /* DoKeyword */,
"else": 74 /* ElseKeyword */,
"enum": 75 /* EnumKeyword */,
"export": 76 /* ExportKeyword */,
"extends": 77 /* ExtendsKeyword */,
"false": 78 /* FalseKeyword */,
"finally": 79 /* FinallyKeyword */,
"for": 80 /* ForKeyword */,
"function": 81 /* FunctionKeyword */,
"get": 113 /* GetKeyword */,
"if": 82 /* IfKeyword */,
"implements": 100 /* ImplementsKeyword */,
"import": 83 /* ImportKeyword */,
"in": 84 /* InKeyword */,
"instanceof": 85 /* InstanceOfKeyword */,
"interface": 101 /* InterfaceKeyword */,
"let": 102 /* LetKeyword */,
"module": 114 /* ModuleKeyword */,
"new": 86 /* NewKeyword */,
"null": 87 /* NullKeyword */,
"number": 116 /* NumberKeyword */,
"package": 103 /* PackageKeyword */,
"private": 104 /* PrivateKeyword */,
"protected": 105 /* ProtectedKeyword */,
"public": 106 /* PublicKeyword */,
"require": 115 /* RequireKeyword */,
"return": 88 /* ReturnKeyword */,
"set": 117 /* SetKeyword */,
"static": 107 /* StaticKeyword */,
"string": 118 /* StringKeyword */,
"super": 89 /* SuperKeyword */,
"switch": 90 /* SwitchKeyword */,
"this": 91 /* ThisKeyword */,
"throw": 92 /* ThrowKeyword */,
"true": 93 /* TrueKeyword */,
"try": 94 /* TryKeyword */,
"type": 119 /* TypeKeyword */,
"typeof": 95 /* TypeOfKeyword */,
"var": 96 /* VarKeyword */,
"void": 97 /* VoidKeyword */,
"while": 98 /* WhileKeyword */,
"with": 99 /* WithKeyword */,
"yield": 108 /* YieldKeyword */,
"{": 13 /* OpenBraceToken */,
"}": 14 /* CloseBraceToken */,
"(": 15 /* OpenParenToken */,
")": 16 /* CloseParenToken */,
"[": 17 /* OpenBracketToken */,
"]": 18 /* CloseBracketToken */,
".": 19 /* DotToken */,
"...": 20 /* DotDotDotToken */,
";": 21 /* SemicolonToken */,
",": 22 /* CommaToken */,
"<": 23 /* LessThanToken */,
">": 24 /* GreaterThanToken */,
"<=": 25 /* LessThanEqualsToken */,
">=": 26 /* GreaterThanEqualsToken */,
"==": 27 /* EqualsEqualsToken */,
"!=": 28 /* ExclamationEqualsToken */,
"===": 29 /* EqualsEqualsEqualsToken */,
"!==": 30 /* ExclamationEqualsEqualsToken */,
"=>": 31 /* EqualsGreaterThanToken */,
"+": 32 /* PlusToken */,
"-": 33 /* MinusToken */,
"*": 34 /* AsteriskToken */,
"/": 35 /* SlashToken */,
"%": 36 /* PercentToken */,
"++": 37 /* PlusPlusToken */,
"--": 38 /* MinusMinusToken */,
"<<": 39 /* LessThanLessThanToken */,
">>": 40 /* GreaterThanGreaterThanToken */,
">>>": 41 /* GreaterThanGreaterThanGreaterThanToken */,
"&": 42 /* AmpersandToken */,
"|": 43 /* BarToken */,
"^": 44 /* CaretToken */,
"!": 45 /* ExclamationToken */,
"~": 46 /* TildeToken */,
"&&": 47 /* AmpersandAmpersandToken */,
"||": 48 /* BarBarToken */,
"?": 49 /* QuestionToken */,
":": 50 /* ColonToken */,
"=": 51 /* EqualsToken */,
"+=": 52 /* PlusEqualsToken */,
"-=": 53 /* MinusEqualsToken */,
"*=": 54 /* AsteriskEqualsToken */,
"/=": 55 /* SlashEqualsToken */,
"%=": 56 /* PercentEqualsToken */,
"<<=": 57 /* LessThanLessThanEqualsToken */,
">>=": 58 /* GreaterThanGreaterThanEqualsToken */,
">>>=": 59 /* GreaterThanGreaterThanGreaterThanEqualsToken */,
"&=": 60 /* AmpersandEqualsToken */,
"|=": 61 /* BarEqualsToken */,
"^=": 62 /* CaretEqualsToken */
};
var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
function lookupInUnicodeMap(code, map) {
if (code < map[0]) {
return false;
}
var lo = 0;
var hi = map.length;
var mid;
while (lo + 1 < hi) {
mid = lo + (hi - lo) / 2;
mid -= mid % 2;
if (map[mid] <= code && code <= map[mid + 1]) {
return true;
}
if (code < map[mid]) {
hi = mid;
}
else {
lo = mid + 2;
}
}
return false;
}
function isUnicodeIdentifierStart(code, languageVersion) {
return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierStart) : lookupInUnicodeMap(code, unicodeES5IdentifierStart);
}
function isUnicodeIdentifierPart(code, languageVersion) {
return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierPart) : lookupInUnicodeMap(code, unicodeES5IdentifierPart);
}
function makeReverseMap(source) {
var result = [];
for (var name in source) {
if (source.hasOwnProperty(name)) {
result[source[name]] = name;
}
}
return result;
}
var tokenStrings = makeReverseMap(textToToken);
function tokenToString(t) {
return tokenStrings[t];
}
ts.tokenToString = tokenToString;
function getLineStarts(text) {
var result = new Array();
var pos = 0;
var lineStart = 0;
while (pos < text.length) {
var ch = text.charCodeAt(pos++);
switch (ch) {
case 13 /* carriageReturn */:
if (text.charCodeAt(pos) === 10 /* lineFeed */) {
pos++;
}
case 10 /* lineFeed */:
result.push(lineStart);
lineStart = pos;
break;
default:
if (ch > 127 /* maxAsciiCharacter */ && isLineBreak(ch)) {
result.push(lineStart);
lineStart = pos;
}
break;
}
}
result.push(lineStart);
return result;
}
ts.getLineStarts = getLineStarts;
function getPositionFromLineAndCharacter(lineStarts, line, character) {
ts.Debug.assert(line > 0);
return lineStarts[line - 1] + character - 1;
}
ts.getPositionFromLineAndCharacter = getPositionFromLineAndCharacter;
function getLineAndCharacterOfPosition(lineStarts, position) {
var lineNumber = ts.binarySearch(lineStarts, position);
if (lineNumber < 0) {
lineNumber = (~lineNumber) - 1;
}
return {
line: lineNumber + 1,
character: position - lineStarts[lineNumber] + 1
};
}
ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition;
function positionToLineAndCharacter(text, pos) {
var lineStarts = getLineStarts(text);
return getLineAndCharacterOfPosition(lineStarts, pos);
}
ts.positionToLineAndCharacter = positionToLineAndCharacter;
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isWhiteSpace(ch) {
return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */;
}
ts.isWhiteSpace = isWhiteSpace;
function isLineBreak(ch) {
return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */ || ch === 133 /* nextLine */;
}
ts.isLineBreak = isLineBreak;
function isDigit(ch) {
return ch >= 48 /* _0 */ && ch <= 57 /* _9 */;
}
function isOctalDigit(ch) {
return ch >= 48 /* _0 */ && ch <= 55 /* _7 */;
}
ts.isOctalDigit = isOctalDigit;
function skipTrivia(text, pos, stopAfterLineBreak) {
while (true) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13 /* carriageReturn */:
if (text.charCodeAt(pos + 1) === 10 /* lineFeed */)
pos++;
case 10 /* lineFeed */:
pos++;
if (stopAfterLineBreak)
return pos;
continue;
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 32 /* space */:
pos++;
continue;
case 47 /* slash */:
if (text.charCodeAt(pos + 1) === 47 /* slash */) {
pos += 2;
while (pos < text.length) {
if (isLineBreak(text.charCodeAt(pos))) {
break;
}
pos++;
}
continue;
}
if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
pos += 2;
while (pos < text.length) {
if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {
pos += 2;
break;
}
pos++;
}
continue;
}
break;
default:
if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) {
pos++;
continue;
}
break;
}
return pos;
}
}
ts.skipTrivia = skipTrivia;
function getCommentRanges(text, pos, trailing) {
var result;
var collecting = trailing || pos === 0;
while (true) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13 /* carriageReturn */:
if (text.charCodeAt(pos + 1) === 10 /* lineFeed */)
pos++;
case 10 /* lineFeed */:
pos++;
if (trailing) {
return result;
}
collecting = true;
if (result && result.length) {
result[result.length - 1].hasTrailingNewLine = true;
}
continue;
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 32 /* space */:
pos++;
continue;
case 47 /* slash */:
var nextChar = text.charCodeAt(pos + 1);
var hasTrailingNewLine = false;
if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) {
var startPos = pos;
pos += 2;
if (nextChar === 47 /* slash */) {
while (pos < text.length) {
if (isLineBreak(text.charCodeAt(pos))) {
hasTrailingNewLine = true;
break;
}
pos++;
}
}
else {
while (pos < text.length) {
if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {
pos += 2;
break;
}
pos++;
}
}
if (collecting) {
if (!result)
result = [];
result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine });
}
continue;
}
break;
default:
if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) {
if (result && result.length && isLineBreak(ch)) {
result[result.length - 1].hasTrailingNewLine = true;
}
pos++;
continue;
}
break;
}
return result;
}
}
function getLeadingCommentRanges(text, pos) {
return getCommentRanges(text, pos, false);
}
ts.getLeadingCommentRanges = getLeadingCommentRanges;
function getTrailingCommentRanges(text, pos) {
return getCommentRanges(text, pos, true);
}
ts.getTrailingCommentRanges = getTrailingCommentRanges;
function isIdentifierStart(ch, languageVersion) {
return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion);
}
ts.isIdentifierStart = isIdentifierStart;
function isIdentifierPart(ch, languageVersion) {
return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion);
}
ts.isIdentifierPart = isIdentifierPart;
function createScanner(languageVersion, skipTrivia, text, onError, onComment) {
var pos;
var len;
var startPos;
var tokenPos;
var token;
var tokenValue;
var precedingLineBreak;
function error(message) {
if (onError) {
onError(message);
}
}
function isIdentifierStart(ch) {
return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion);
}
function isIdentifierPart(ch) {
return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion);
}
function scanNumber() {
var start = pos;
while (isDigit(text.charCodeAt(pos)))
pos++;
if (text.charCodeAt(pos) === 46 /* dot */) {
pos++;
while (isDigit(text.charCodeAt(pos)))
pos++;
}
var end = pos;
if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) {
pos++;
if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */)
pos++;
if (isDigit(text.charCodeAt(pos))) {
pos++;
while (isDigit(text.charCodeAt(pos)))
pos++;
end = pos;
}
else {
error(ts.Diagnostics.Digit_expected);
}
}
return +(text.substring(start, end));
}
function scanOctalDigits() {
var start = pos;
while (isOctalDigit(text.charCodeAt(pos))) {
pos++;
}
return +(text.substring(start, pos));
}
function scanHexDigits(count, mustMatchCount) {
var digits = 0;
var value = 0;
while (digits < count || !mustMatchCount) {
var ch = text.charCodeAt(pos);
if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
value = value * 16 + ch - 48 /* _0 */;
}
else if (ch >= 65 /* A */ && ch <= 70 /* F */) {
value = value * 16 + ch - 65 /* A */ + 10;
}
else if (ch >= 97 /* a */ && ch <= 102 /* f */) {
value = value * 16 + ch - 97 /* a */ + 10;
}
else {
break;
}
pos++;
digits++;
}
if (digits < count) {
value = -1;
}
return value;
}
function scanString() {
var quote = text.charCodeAt(pos++);
var result = "";
var start = pos;
while (true) {
if (pos >= len) {
result += text.substring(start, pos);
error(ts.Diagnostics.Unexpected_end_of_text);
break;
}
var ch = text.charCodeAt(pos);
if (ch === quote) {
result += text.substring(start, pos);
pos++;
break;
}
if (ch === 92 /* backslash */) {
result += text.substring(start, pos);
result += scanEscapeSequence();
start = pos;
continue;
}
if (isLineBreak(ch)) {
result += text.substring(start, pos);
error(ts.Diagnostics.Unterminated_string_literal);
break;
}
pos++;
}
return result;
}
function scanTemplateAndSetTokenValue() {
var startedWithBacktick = text.charCodeAt(pos) === 96 /* backtick */;
pos++;
var start = pos;
var contents = "";
var resultingToken;
while (true) {
if (pos >= len) {
contents += text.substring(start, pos);
error(ts.Diagnostics.Unexpected_end_of_text);
resultingToken = startedWithBacktick ? 9 /* NoSubstitutionTemplateLiteral */ : 12 /* TemplateTail */;
break;
}
var currChar = text.charCodeAt(pos);
if (currChar === 96 /* backtick */) {
contents += text.substring(start, pos);
pos++;
resultingToken = startedWithBacktick ? 9 /* NoSubstitutionTemplateLiteral */ : 12 /* TemplateTail */;
break;
}
if (currChar === 36 /* $ */ && pos + 1 < len && text.charCodeAt(pos + 1) === 123 /* openBrace */) {
contents += text.substring(start, pos);
pos += 2;
resultingToken = startedWithBacktick ? 10 /* TemplateHead */ : 11 /* TemplateMiddle */;
break;
}
if (currChar === 92 /* backslash */) {
contents += text.substring(start, pos);
contents += scanEscapeSequence();
start = pos;
continue;
}
if (currChar === 13 /* carriageReturn */) {
contents += text.substring(start, pos);
if (pos + 1 < len && text.charCodeAt(pos + 1) === 10 /* lineFeed */) {
pos++;
}
pos++;
contents += "\n";
start = pos;
continue;
}
pos++;
}
ts.Debug.assert(resultingToken !== undefined);
tokenValue = contents;
return resultingToken;
}
function scanEscapeSequence() {
pos++;
if (pos >= len) {
error(ts.Diagnostics.Unexpected_end_of_text);
return "";
}
var ch = text.charCodeAt(pos++);
switch (ch) {
case 48 /* _0 */:
return "\0";
case 98 /* b */:
return "\b";
case 116 /* t */:
return "\t";
case 110 /* n */:
return "\n";
case 118 /* v */:
return "\v";
case 102 /* f */:
return "\f";
case 114 /* r */:
return "\r";
case 39 /* singleQuote */:
return "\'";
case 34 /* doubleQuote */:
return "\"";
case 120 /* x */:
case 117 /* u */:
var ch = scanHexDigits(ch === 120 /* x */ ? 2 : 4, true);
if (ch >= 0) {
return String.fromCharCode(ch);
}
else {
error(ts.Diagnostics.Hexadecimal_digit_expected);
return "";
}
case 13 /* carriageReturn */:
if (pos < len && text.charCodeAt(pos) === 10 /* lineFeed */) {
pos++;
}
case 10 /* lineFeed */:
case 8232 /* lineSeparator */:
case 8233 /* paragraphSeparator */:
return "";
default:
return String.fromCharCode(ch);
}
}
function peekUnicodeEscape() {
if (pos + 5 < len && text.charCodeAt(pos + 1) === 117 /* u */) {
var start = pos;
pos += 2;
var value = scanHexDigits(4, true);
pos = start;
return value;
}
return -1;
}
function scanIdentifierParts() {
var result = "";
var start = pos;
while (pos < len) {
var ch = text.charCodeAt(pos);
if (isIdentifierPart(ch)) {
pos++;
}
else if (ch === 92 /* backslash */) {
ch = peekUnicodeEscape();
if (!(ch >= 0 && isIdentifierPart(ch))) {
break;
}
result += text.substring(start, pos);
result += String.fromCharCode(ch);
pos += 6;
start = pos;
}
else {
break;
}
}
result += text.substring(start, pos);
return result;
}
function getIdentifierToken() {
var len = tokenValue.length;
if (len >= 2 && len <= 11) {
var ch = tokenValue.charCodeAt(0);
if (ch >= 97 /* a */ && ch <= 122 /* z */ && hasOwnProperty.call(textToToken, tokenValue)) {
return token = textToToken[tokenValue];
}
}
return token = 63 /* Identifier */;
}
function scan() {
startPos = pos;
precedingLineBreak = false;
while (true) {
tokenPos = pos;
if (pos >= len) {
return token = 1 /* EndOfFileToken */;
}
var ch = text.charCodeAt(pos);
switch (ch) {
case 10 /* lineFeed */:
case 13 /* carriageReturn */:
precedingLineBreak = true;
if (skipTrivia) {
pos++;
continue;
}
else {
if (ch === 13 /* carriageReturn */ && pos + 1 < len && text.charCodeAt(pos + 1) === 10 /* lineFeed */) {
pos += 2;
}
else {
pos++;
}
return token = 4 /* NewLineTrivia */;
}
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 32 /* space */:
if (skipTrivia) {
pos++;
continue;
}
else {
while (pos < len && isWhiteSpace(text.charCodeAt(pos))) {
pos++;
}
return token = 5 /* WhitespaceTrivia */;
}
case 33 /* exclamation */:
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
if (text.charCodeAt(pos + 2) === 61 /* equals */) {
return pos += 3, token = 30 /* ExclamationEqualsEqualsToken */;
}
return pos += 2, token = 28 /* ExclamationEqualsToken */;
}
return pos++, token = 45 /* ExclamationToken */;
case 34 /* doubleQuote */:
case 39 /* singleQuote */:
tokenValue = scanString();
return token = 7 /* StringLiteral */;
case 96 /* backtick */:
return token = scanTemplateAndSetTokenValue();
case 37 /* percent */:
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 56 /* PercentEqualsToken */;
}
return pos++, token = 36 /* PercentToken */;
case 38 /* ampersand */:
if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
return pos += 2, token = 47 /* AmpersandAmpersandToken */;
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 60 /* AmpersandEqualsToken */;
}
return pos++, token = 42 /* AmpersandToken */;
case 40 /* openParen */:
return pos++, token = 15 /* OpenParenToken */;
case 41 /* closeParen */:
return pos++, token = 16 /* CloseParenToken */;
case 42 /* asterisk */:
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 54 /* AsteriskEqualsToken */;
}
return pos++, token = 34 /* AsteriskToken */;
case 43 /* plus */:
if (text.charCodeAt(pos + 1) === 43 /* plus */) {
return pos += 2, token = 37 /* PlusPlusToken */;
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 52 /* PlusEqualsToken */;
}
return pos++, token = 32 /* PlusToken */;
case 44 /* comma */:
return pos++, token = 22 /* CommaToken */;
case 45 /* minus */:
if (text.charCodeAt(pos + 1) === 45 /* minus */) {
return pos += 2, token = 38 /* MinusMinusToken */;
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 53 /* MinusEqualsToken */;
}
return pos++, token = 33 /* MinusToken */;
case 46 /* dot */:
if (isDigit(text.charCodeAt(pos + 1))) {
tokenValue = "" + scanNumber();
return token = 6 /* NumericLiteral */;
}
if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) {
return pos += 3, token = 20 /* DotDotDotToken */;
}
return pos++, token = 19 /* DotToken */;
case 47 /* slash */:
if (text.charCodeAt(pos + 1) === 47 /* slash */) {
pos += 2;
while (pos < len) {
if (isLineBreak(text.charCodeAt(pos))) {
break;
}
pos++;
}
if (onComment) {
onComment(tokenPos, pos);
}
if (skipTrivia) {
continue;
}
else {
return token = 2 /* SingleLineCommentTrivia */;
}
}
if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
pos += 2;
var commentClosed = false;
while (pos < len) {
var ch = text.charCodeAt(pos);
if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {
pos += 2;
commentClosed = true;
break;
}
if (isLineBreak(ch)) {
precedingLineBreak = true;
}
pos++;
}
if (!commentClosed) {
error(ts.Diagnostics.Asterisk_Slash_expected);
}
if (onComment) {
onComment(tokenPos, pos);
}
if (skipTrivia) {
continue;
}
else {
return token = 3 /* MultiLineCommentTrivia */;
}
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 55 /* SlashEqualsToken */;
}
return pos++, token = 35 /* SlashToken */;
case 48 /* _0 */:
if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) {
pos += 2;
var value = scanHexDigits(1, false);
if (value < 0) {
error(ts.Diagnostics.Hexadecimal_digit_expected);
value = 0;
}
tokenValue = "" + value;
return 6 /* NumericLiteral */;
}
if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) {
tokenValue = "" + scanOctalDigits();
return 6 /* NumericLiteral */;
}
case 49 /* _1 */:
case 50 /* _2 */:
case 51 /* _3 */:
case 52 /* _4 */:
case 53 /* _5 */:
case 54 /* _6 */:
case 55 /* _7 */:
case 56 /* _8 */:
case 57 /* _9 */:
tokenValue = "" + scanNumber();
return token = 6 /* NumericLiteral */;
case 58 /* colon */:
return pos++, token = 50 /* ColonToken */;
case 59 /* semicolon */:
return pos++, token = 21 /* SemicolonToken */;
case 60 /* lessThan */:
if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
if (text.charCodeAt(pos + 2) === 61 /* equals */) {
return pos += 3, token = 57 /* LessThanLessThanEqualsToken */;
}
return pos += 2, token = 39 /* LessThanLessThanToken */;
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 25 /* LessThanEqualsToken */;
}
return pos++, token = 23 /* LessThanToken */;
case 61 /* equals */:
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
if (text.charCodeAt(pos + 2) === 61 /* equals */) {
return pos += 3, token = 29 /* EqualsEqualsEqualsToken */;
}
return pos += 2, token = 27 /* EqualsEqualsToken */;
}
if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
return pos += 2, token = 31 /* EqualsGreaterThanToken */;
}
return pos++, token = 51 /* EqualsToken */;
case 62 /* greaterThan */:
return pos++, token = 24 /* GreaterThanToken */;
case 63 /* question */:
return pos++, token = 49 /* QuestionToken */;
case 91 /* openBracket */:
return pos++, token = 17 /* OpenBracketToken */;
case 93 /* closeBracket */:
return pos++, token = 18 /* CloseBracketToken */;
case 94 /* caret */:
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 62 /* CaretEqualsToken */;
}
return pos++, token = 44 /* CaretToken */;
case 123 /* openBrace */:
return pos++, token = 13 /* OpenBraceToken */;
case 124 /* bar */:
if (text.charCodeAt(pos + 1) === 124 /* bar */) {
return pos += 2, token = 48 /* BarBarToken */;
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 61 /* BarEqualsToken */;
}
return pos++, token = 43 /* BarToken */;
case 125 /* closeBrace */:
return pos++, token = 14 /* CloseBraceToken */;
case 126 /* tilde */:
return pos++, token = 46 /* TildeToken */;
case 92 /* backslash */:
var ch = peekUnicodeEscape();
if (ch >= 0 && isIdentifierStart(ch)) {
pos += 6;
tokenValue = String.fromCharCode(ch) + scanIdentifierParts();
return token = getIdentifierToken();
}
error(ts.Diagnostics.Invalid_character);
return pos++, token = 0 /* Unknown */;
default:
if (isIdentifierStart(ch)) {
pos++;
while (pos < len && isIdentifierPart(ch = text.charCodeAt(pos)))
pos++;
tokenValue = text.substring(tokenPos, pos);
if (ch === 92 /* backslash */) {
tokenValue += scanIdentifierParts();
}
return token = getIdentifierToken();
}
else if (isWhiteSpace(ch)) {
pos++;
continue;
}
else if (isLineBreak(ch)) {
precedingLineBreak = true;
pos++;
continue;
}
error(ts.Diagnostics.Invalid_character);
return pos++, token = 0 /* Unknown */;
}
}
}
function reScanGreaterToken() {
if (token === 24 /* GreaterThanToken */) {
if (text.charCodeAt(pos) === 62 /* greaterThan */) {
if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
if (text.charCodeAt(pos + 2) === 61 /* equals */) {
return pos += 3, token = 59 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
}
return pos += 2, token = 41 /* GreaterThanGreaterThanGreaterThanToken */;
}
if (text.charCodeAt(pos + 1) === 61 /* equals */) {
return pos += 2, token = 58 /* GreaterThanGreaterThanEqualsToken */;
}
return pos++, token = 40 /* GreaterThanGreaterThanToken */;
}
if (text.charCodeAt(pos) === 61 /* equals */) {
return pos++, token = 26 /* GreaterThanEqualsToken */;
}
}
return token;
}
function reScanSlashToken() {
if (token === 35 /* SlashToken */ || token === 55 /* SlashEqualsToken */) {
var p = tokenPos + 1;
var inEscape = false;
var inCharacterClass = false;
while (true) {
if (p >= len) {
return token;
}
var ch = text.charCodeAt(p);
if (isLineBreak(ch)) {
return token;
}
if (inEscape) {
inEscape = false;
}
else if (ch === 47 /* slash */ && !inCharacterClass) {
break;
}
else if (ch === 91 /* openBracket */) {
inCharacterClass = true;
}
else if (ch === 92 /* backslash */) {
inEscape = true;
}
else if (ch === 93 /* closeBracket */) {
inCharacterClass = false;
}
p++;
}
p++;
while (isIdentifierPart(text.charCodeAt(p))) {
p++;
}
pos = p;
tokenValue = text.substring(tokenPos, pos);
token = 8 /* RegularExpressionLiteral */;
}
return token;
}
function reScanTemplateToken() {
ts.Debug.assert(token === 14 /* CloseBraceToken */, "'reScanTemplateToken' should only be called on a '}'");
pos = tokenPos;
return token = scanTemplateAndSetTokenValue();
}
function tryScan(callback) {
var savePos = pos;
var saveStartPos = startPos;
var saveTokenPos = tokenPos;
var saveToken = token;
var saveTokenValue = tokenValue;
var savePrecedingLineBreak = precedingLineBreak;
var result = callback();
if (!result) {
pos = savePos;
startPos = saveStartPos;
tokenPos = saveTokenPos;
token = saveToken;
tokenValue = saveTokenValue;
precedingLineBreak = savePrecedingLineBreak;
}
return result;
}
function setText(newText) {
text = newText || "";
len = text.length;
setTextPos(0);
}
function setTextPos(textPos) {
pos = textPos;
startPos = textPos;
tokenPos = textPos;
token = 0 /* Unknown */;
precedingLineBreak = false;
}
setText(text);
return {
getStartPos: function () { return startPos; },
getTextPos: function () { return pos; },
getToken: function () { return token; },
getTokenPos: function () { return tokenPos; },
getTokenText: function () { return text.substring(tokenPos, pos); },
getTokenValue: function () { return tokenValue; },
hasPrecedingLineBreak: function () { return precedingLineBreak; },
isIdentifier: function () { return token === 63 /* Identifier */ || token > 99 /* LastReservedWord */; },
isReservedWord: function () { return token >= 64 /* FirstReservedWord */ && token <= 99 /* LastReservedWord */; },
reScanGreaterToken: reScanGreaterToken,
reScanSlashToken: reScanSlashToken,
reScanTemplateToken: reScanTemplateToken,
scan: scan,
setText: setText,
setTextPos: setTextPos,
tryScan: tryScan
};
}
ts.createScanner = createScanner;
})(ts || (ts = {}));
var ts;
(function (ts) {
var nodeConstructors = new Array(196 /* Count */);
function getNodeConstructor(kind) {
return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind));
}
ts.getNodeConstructor = getNodeConstructor;
function createRootNode(kind, pos, end, flags) {
var node = new (getNodeConstructor(kind))();
node.pos = pos;
node.end = end;
node.flags = flags;
return node;
}
function getSourceFileOfNode(node) {
while (node && node.kind !== 193 /* SourceFile */)
node = node.parent;
return node;
}
ts.getSourceFileOfNode = getSourceFileOfNode;
function nodePosToString(node) {
var file = getSourceFileOfNode(node);
var loc = file.getLineAndCharacterFromPosition(node.pos);
return file.filename + "(" + loc.line + "," + loc.character + ")";
}
ts.nodePosToString = nodePosToString;
function getStartPosOfNode(node) {
return node.pos;
}
ts.getStartPosOfNode = getStartPosOfNode;
function getTokenPosOfNode(node, sourceFile) {
if (node.pos === node.end) {
return node.pos;
}
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos);
}
ts.getTokenPosOfNode = getTokenPosOfNode;
function getTextOfNodeFromSourceText(sourceText, node) {
return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end);
}
ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText;
function getTextOfNode(node) {
var text = getSourceFileOfNode(node).text;
return text.substring(ts.skipTrivia(text, node.pos), node.end);
}
ts.getTextOfNode = getTextOfNode;
function escapeIdentifier(identifier) {
return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier;
}
ts.escapeIdentifier = escapeIdentifier;
function unescapeIdentifier(identifier) {
return identifier.length >= 3 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ && identifier.charCodeAt(2) === 95 /* _ */ ? identifier.substr(1) : identifier;
}
ts.unescapeIdentifier = unescapeIdentifier;
function declarationNameToString(name) {
return name.kind === 120 /* Missing */ ? "(Missing)" : getTextOfNode(name);
}
ts.declarationNameToString = declarationNameToString;
function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
node = getErrorSpanForNode(node);
var file = getSourceFileOfNode(node);
var start = node.kind === 120 /* Missing */ ? node.pos : ts.skipTrivia(file.text, node.pos);
var length = node.end - start;
return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2);
}
ts.createDiagnosticForNode = createDiagnosticForNode;
function createDiagnosticForNodeFromMessageChain(node, messageChain, newLine) {
node = getErrorSpanForNode(node);
var file = getSourceFileOfNode(node);
var start = ts.skipTrivia(file.text, node.pos);
var length = node.end - start;
return ts.flattenDiagnosticChain(file, start, length, messageChain, newLine);
}
ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain;
function getErrorSpanForNode(node) {
var errorSpan;
switch (node.kind) {
case 181 /* VariableDeclaration */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 188 /* ModuleDeclaration */:
case 187 /* EnumDeclaration */:
case 192 /* EnumMember */:
errorSpan = node.name;
break;
}
return errorSpan && errorSpan.pos < errorSpan.end ? errorSpan : node;
}
ts.getErrorSpanForNode = getErrorSpanForNode;
function isExternalModule(file) {
return file.externalModuleIndicator !== undefined;
}
ts.isExternalModule = isExternalModule;
function isDeclarationFile(file) {
return (file.flags & 1024 /* DeclarationFile */) !== 0;
}
ts.isDeclarationFile = isDeclarationFile;
function isConstEnumDeclaration(node) {
return (node.flags & 4096 /* Const */) !== 0;
}
ts.isConstEnumDeclaration = isConstEnumDeclaration;
function isPrologueDirective(node) {
return node.kind === 161 /* ExpressionStatement */ && node.expression.kind === 7 /* StringLiteral */;
}
ts.isPrologueDirective = isPrologueDirective;
function isEvalOrArgumentsIdentifier(node) {
return node.kind === 63 /* Identifier */ && node.text && (node.text === "eval" || node.text === "arguments");
}
function isUseStrictPrologueDirective(node) {
ts.Debug.assert(isPrologueDirective(node));
return node.expression.text === "use strict";
}
function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
sourceFileOfNode = sourceFileOfNode || getSourceFileOfNode(node);
if (node.kind === 123 /* Parameter */ || node.kind === 122 /* TypeParameter */) {
return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos));
}
else {
return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos);
}
}
ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
function getJsDocComments(node, sourceFileOfNode) {
return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), function (comment) { return isJsDocComment(comment); });
function isJsDocComment(comment) {
return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47 /* slash */;
}
}
ts.getJsDocComments = getJsDocComments;
ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
function forEachChild(node, cbNode, cbNodes) {
function child(node) {
if (node)
return cbNode(node);
}
function children(nodes) {
if (nodes) {
if (cbNodes)
return cbNodes(nodes);
var result;
for (var i = 0, len = nodes.length; i < len; i++) {
if (result = cbNode(nodes[i]))
break;
}
return result;
}
}
if (!node)
return;
switch (node.kind) {
case 121 /* QualifiedName */:
return child(node.left) || child(node.right);
case 122 /* TypeParameter */:
return child(node.name) || child(node.constraint);
case 123 /* Parameter */:
return child(node.name) || child(node.type) || child(node.initializer);
case 124 /* Property */:
case 141 /* PropertyAssignment */:
return child(node.name) || child(node.type) || child(node.initializer);
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
case 131 /* IndexSignature */:
return children(node.typeParameters) || children(node.parameters) || child(node.type);
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 149 /* FunctionExpression */:
case 182 /* FunctionDeclaration */:
case 150 /* ArrowFunction */:
return child(node.name) || children(node.typeParameters) || children(node.parameters) || child(node.type) || child(node.body);
case 132 /* TypeReference */:
return child(node.typeName) || children(node.typeArguments);
case 133 /* TypeQuery */:
return child(node.exprName);
case 134 /* TypeLiteral */:
return children(node.members);
case 135 /* ArrayType */:
return child(node.elementType);
case 136 /* TupleType */:
return children(node.elementTypes);
case 137 /* UnionType */:
return children(node.types);
case 138 /* ParenType */:
return child(node.type);
case 139 /* ArrayLiteral */:
return children(node.elements);
case 140 /* ObjectLiteral */:
return children(node.properties);
case 142 /* PropertyAccess */:
return child(node.left) || child(node.right);
case 143 /* IndexedAccess */:
return child(node.object) || child(node.index);
case 144 /* CallExpression */:
case 145 /* NewExpression */:
return child(node.func) || children(node.typeArguments) || children(node.arguments);
case 146 /* TaggedTemplateExpression */:
return child(node.tag) || child(node.template);
case 147 /* TypeAssertion */:
return child(node.type) || child(node.operand);
case 148 /* ParenExpression */:
return child(node.expression);
case 151 /* PrefixOperator */:
case 152 /* PostfixOperator */:
return child(node.operand);
case 153 /* BinaryExpression */:
return child(node.left) || child(node.right);
case 154 /* ConditionalExpression */:
return child(node.condition) || child(node.whenTrue) || child(node.whenFalse);
case 158 /* Block */:
case 177 /* TryBlock */:
case 179 /* FinallyBlock */:
case 183 /* FunctionBlock */:
case 189 /* ModuleBlock */:
case 193 /* SourceFile */:
return children(node.statements);
case 159 /* VariableStatement */:
return children(node.declarations);
case 161 /* ExpressionStatement */:
return child(node.expression);
case 162 /* IfStatement */:
return child(node.expression) || child(node.thenStatement) || child(node.elseStatement);
case 163 /* DoStatement */:
return child(node.statement) || child(node.expression);
case 164 /* WhileStatement */:
return child(node.expression) || child(node.statement);
case 165 /* ForStatement */:
return children(node.declarations) || child(node.initializer) || child(node.condition) || child(node.iterator) || child(node.statement);
case 166 /* ForInStatement */:
return child(node.declaration) || child(node.variable) || child(node.expression) || child(node.statement);
case 167 /* ContinueStatement */:
case 168 /* BreakStatement */:
return child(node.label);
case 169 /* ReturnStatement */:
return child(node.expression);
case 170 /* WithStatement */:
return child(node.expression) || child(node.statement);
case 171 /* SwitchStatement */:
return child(node.expression) || children(node.clauses);
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
return child(node.expression) || children(node.statements);
case 174 /* LabeledStatement */:
return child(node.label) || child(node.statement);
case 175 /* ThrowStatement */:
return child(node.expression);
case 176 /* TryStatement */:
return child(node.tryBlock) || child(node.catchBlock) || child(node.finallyBlock);
case 178 /* CatchBlock */:
return child(node.variable) || children(node.statements);
case 181 /* VariableDeclaration */:
return child(node.name) || child(node.type) || child(node.initializer);
case 184 /* ClassDeclaration */:
return child(node.name) || children(node.typeParameters) || child(node.baseType) || children(node.implementedTypes) || children(node.members);
case 185 /* InterfaceDeclaration */:
return child(node.name) || children(node.typeParameters) || children(node.baseTypes) || children(node.members);
case 186 /* TypeAliasDeclaration */:
return child(node.name) || child(node.type);
case 187 /* EnumDeclaration */:
return child(node.name) || children(node.members);
case 192 /* EnumMember */:
return child(node.name) || child(node.initializer);
case 188 /* ModuleDeclaration */:
return child(node.name) || child(node.body);
case 190 /* ImportDeclaration */:
return child(node.name) || child(node.entityName) || child(node.externalModuleName);
case 191 /* ExportAssignment */:
return child(node.exportName);
case 155 /* TemplateExpression */:
return child(node.head) || children(node.templateSpans);
case 156 /* TemplateSpan */:
return child(node.expression) || child(node.literal);
}
}
ts.forEachChild = forEachChild;
function forEachReturnStatement(body, visitor) {
return traverse(body);
function traverse(node) {
switch (node.kind) {
case 169 /* ReturnStatement */:
return visitor(node);
case 158 /* Block */:
case 183 /* FunctionBlock */:
case 162 /* IfStatement */:
case 163 /* DoStatement */:
case 164 /* WhileStatement */:
case 165 /* ForStatement */:
case 166 /* ForInStatement */:
case 170 /* WithStatement */:
case 171 /* SwitchStatement */:
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
case 174 /* LabeledStatement */:
case 176 /* TryStatement */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
return forEachChild(node, traverse);
}
}
}
ts.forEachReturnStatement = forEachReturnStatement;
function isAnyFunction(node) {
if (node) {
switch (node.kind) {
case 149 /* FunctionExpression */:
case 182 /* FunctionDeclaration */:
case 150 /* ArrowFunction */:
case 125 /* Method */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 126 /* Constructor */:
return true;
}
}
return false;
}
ts.isAnyFunction = isAnyFunction;
function getContainingFunction(node) {
while (true) {
node = node.parent;
if (!node || isAnyFunction(node)) {
return node;
}
}
}
ts.getContainingFunction = getContainingFunction;
function getThisContainer(node, includeArrowFunctions) {
while (true) {
node = node.parent;
if (!node) {
return undefined;
}
switch (node.kind) {
case 150 /* ArrowFunction */:
if (!includeArrowFunctions) {
continue;
}
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 188 /* ModuleDeclaration */:
case 124 /* Property */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 187 /* EnumDeclaration */:
case 193 /* SourceFile */:
return node;
}
}
}
ts.getThisContainer = getThisContainer;
function getSuperContainer(node) {
while (true) {
node = node.parent;
if (!node) {
return undefined;
}
switch (node.kind) {
case 124 /* Property */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
return node;
}
}
}
ts.getSuperContainer = getSuperContainer;
function isExpression(node) {
switch (node.kind) {
case 91 /* ThisKeyword */:
case 89 /* SuperKeyword */:
case 87 /* NullKeyword */:
case 93 /* TrueKeyword */:
case 78 /* FalseKeyword */:
case 8 /* RegularExpressionLiteral */:
case 139 /* ArrayLiteral */:
case 140 /* ObjectLiteral */:
case 142 /* PropertyAccess */:
case 143 /* IndexedAccess */:
case 144 /* CallExpression */:
case 145 /* NewExpression */:
case 146 /* TaggedTemplateExpression */:
case 147 /* TypeAssertion */:
case 148 /* ParenExpression */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
case 151 /* PrefixOperator */:
case 152 /* PostfixOperator */:
case 153 /* BinaryExpression */:
case 154 /* ConditionalExpression */:
case 155 /* TemplateExpression */:
case 9 /* NoSubstitutionTemplateLiteral */:
case 157 /* OmittedExpression */:
return true;
case 121 /* QualifiedName */:
while (node.parent.kind === 121 /* QualifiedName */)
node = node.parent;
return node.parent.kind === 133 /* TypeQuery */;
case 63 /* Identifier */:
if (node.parent.kind === 133 /* TypeQuery */) {
return true;
}
case 6 /* NumericLiteral */:
case 7 /* StringLiteral */:
var parent = node.parent;
switch (parent.kind) {
case 181 /* VariableDeclaration */:
case 123 /* Parameter */:
case 124 /* Property */:
case 192 /* EnumMember */:
case 141 /* PropertyAssignment */:
return parent.initializer === node;
case 161 /* ExpressionStatement */:
case 162 /* IfStatement */:
case 163 /* DoStatement */:
case 164 /* WhileStatement */:
case 169 /* ReturnStatement */:
case 170 /* WithStatement */:
case 171 /* SwitchStatement */:
case 172 /* CaseClause */:
case 175 /* ThrowStatement */:
case 171 /* SwitchStatement */:
return parent.expression === node;
case 165 /* ForStatement */:
return parent.initializer === node || parent.condition === node || parent.iterator === node;
case 166 /* ForInStatement */:
return parent.variable === node || parent.expression === node;
case 147 /* TypeAssertion */:
return node === parent.operand;
case 156 /* TemplateSpan */:
return node === parent.expression;
default:
if (isExpression(parent)) {
return true;
}
}
}
return false;
}
ts.isExpression = isExpression;
function hasRestParameters(s) {
return s.parameters.length > 0 && (s.parameters[s.parameters.length - 1].flags & 8 /* Rest */) !== 0;
}
ts.hasRestParameters = hasRestParameters;
function isLiteralKind(kind) {
return 6 /* FirstLiteralToken */ <= kind && kind <= 9 /* LastLiteralToken */;
}
ts.isLiteralKind = isLiteralKind;
function isTextualLiteralKind(kind) {
return kind === 7 /* StringLiteral */ || kind === 9 /* NoSubstitutionTemplateLiteral */;
}
ts.isTextualLiteralKind = isTextualLiteralKind;
function isTemplateLiteralKind(kind) {
return 9 /* FirstTemplateToken */ <= kind && kind <= 12 /* LastTemplateToken */;
}
ts.isTemplateLiteralKind = isTemplateLiteralKind;
function isInAmbientContext(node) {
while (node) {
if (node.flags & (2 /* Ambient */ | 1024 /* DeclarationFile */))
return true;
node = node.parent;
}
return false;
}
ts.isInAmbientContext = isInAmbientContext;
function isDeclaration(node) {
switch (node.kind) {
case 122 /* TypeParameter */:
case 123 /* Parameter */:
case 181 /* VariableDeclaration */:
case 124 /* Property */:
case 141 /* PropertyAssignment */:
case 192 /* EnumMember */:
case 125 /* Method */:
case 182 /* FunctionDeclaration */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
case 187 /* EnumDeclaration */:
case 188 /* ModuleDeclaration */:
case 190 /* ImportDeclaration */:
return true;
}
return false;
}
ts.isDeclaration = isDeclaration;
function isStatement(n) {
switch (n.kind) {
case 168 /* BreakStatement */:
case 167 /* ContinueStatement */:
case 180 /* DebuggerStatement */:
case 163 /* DoStatement */:
case 161 /* ExpressionStatement */:
case 160 /* EmptyStatement */:
case 166 /* ForInStatement */:
case 165 /* ForStatement */:
case 162 /* IfStatement */:
case 174 /* LabeledStatement */:
case 169 /* ReturnStatement */:
case 171 /* SwitchStatement */:
case 92 /* ThrowKeyword */:
case 176 /* TryStatement */:
case 159 /* VariableStatement */:
case 164 /* WhileStatement */:
case 170 /* WithStatement */:
case 191 /* ExportAssignment */:
return true;
default:
return false;
}
}
ts.isStatement = isStatement;
function isDeclarationOrFunctionExpressionOrCatchVariableName(name) {
if (name.kind !== 63 /* Identifier */ && name.kind !== 7 /* StringLiteral */ && name.kind !== 6 /* NumericLiteral */) {
return false;
}
var parent = name.parent;
if (isDeclaration(parent) || parent.kind === 149 /* FunctionExpression */) {
return parent.name === name;
}
if (parent.kind === 178 /* CatchBlock */) {
return parent.variable === name;
}
return false;
}
ts.isDeclarationOrFunctionExpressionOrCatchVariableName = isDeclarationOrFunctionExpressionOrCatchVariableName;
function getAncestor(node, kind) {
switch (kind) {
case 184 /* ClassDeclaration */:
while (node) {
switch (node.kind) {
case 184 /* ClassDeclaration */:
return node;
case 187 /* EnumDeclaration */:
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
case 188 /* ModuleDeclaration */:
case 190 /* ImportDeclaration */:
return undefined;
default:
node = node.parent;
continue;
}
}
break;
default:
while (node) {
if (node.kind === kind) {
return node;
}
node = node.parent;
}
break;
}
return undefined;
}
ts.getAncestor = getAncestor;
function parsingContextErrors(context) {
switch (context) {
case 0 /* SourceElements */: return ts.Diagnostics.Declaration_or_statement_expected;
case 1 /* ModuleElements */: return ts.Diagnostics.Declaration_or_statement_expected;
case 2 /* BlockStatements */: return ts.Diagnostics.Statement_expected;
case 3 /* SwitchClauses */: return ts.Diagnostics.case_or_default_expected;
case 4 /* SwitchClauseStatements */: return ts.Diagnostics.Statement_expected;
case 5 /* TypeMembers */: return ts.Diagnostics.Property_or_signature_expected;
case 6 /* ClassMembers */: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;
case 7 /* EnumMembers */: return ts.Diagnostics.Enum_member_expected;
case 8 /* BaseTypeReferences */: return ts.Diagnostics.Type_reference_expected;
case 9 /* VariableDeclarations */: return ts.Diagnostics.Variable_declaration_expected;
case 10 /* ArgumentExpressions */: return ts.Diagnostics.Argument_expression_expected;
case 11 /* ObjectLiteralMembers */: return ts.Diagnostics.Property_assignment_expected;
case 12 /* ArrayLiteralMembers */: return ts.Diagnostics.Expression_or_comma_expected;
case 13 /* Parameters */: return ts.Diagnostics.Parameter_declaration_expected;
case 14 /* TypeParameters */: return ts.Diagnostics.Type_parameter_declaration_expected;
case 15 /* TypeArguments */: return ts.Diagnostics.Type_argument_expected;
case 16 /* TupleElementTypes */: return ts.Diagnostics.Type_expected;
}
}
;
function getFileReferenceFromReferencePath(comment, commentRange) {
var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim;
var isNoDefaultLibRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/gim;
if (simpleReferenceRegEx.exec(comment)) {
if (isNoDefaultLibRegEx.exec(comment)) {
return {
isNoDefaultLib: true
};
}
else {
var matchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment);
if (matchResult) {
var start = commentRange.pos;
var end = commentRange.end;
var fileRef = {
pos: start,
end: end,
filename: matchResult[3]
};
return {
fileReference: fileRef,
isNoDefaultLib: false
};
}
else {
return {
diagnostic: ts.Diagnostics.Invalid_reference_directive_syntax,
isNoDefaultLib: false
};
}
}
}
return undefined;
}
ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath;
function isKeyword(token) {
return 64 /* FirstKeyword */ <= token && token <= 119 /* LastKeyword */;
}
ts.isKeyword = isKeyword;
function isTrivia(token) {
return 2 /* FirstTriviaToken */ <= token && token <= 5 /* LastTriviaToken */;
}
ts.isTrivia = isTrivia;
function isUnterminatedTemplateEnd(node) {
ts.Debug.assert(node.kind === 9 /* NoSubstitutionTemplateLiteral */ || node.kind === 12 /* TemplateTail */);
var sourceText = getSourceFileOfNode(node).text;
if (node.end !== sourceText.length) {
return false;
}
return sourceText.charCodeAt(node.end - 1) !== 96 /* backtick */ || node.text.length === 0;
}
ts.isUnterminatedTemplateEnd = isUnterminatedTemplateEnd;
function isModifier(token) {
switch (token) {
case 106 /* PublicKeyword */:
case 104 /* PrivateKeyword */:
case 105 /* ProtectedKeyword */:
case 107 /* StaticKeyword */:
case 76 /* ExportKeyword */:
case 112 /* DeclareKeyword */:
return true;
}
return false;
}
ts.isModifier = isModifier;
function createSourceFile(filename, sourceText, languageVersion, version, isOpen) {
if (isOpen === void 0) { isOpen = false; }
var file;
var scanner;
var token;
var parsingContext;
var commentRanges;
var identifiers = {};
var identifierCount = 0;
var nodeCount = 0;
var lineStarts;
var isInStrictMode = false;
var lookAheadMode = 0 /* NotLookingAhead */;
var inAmbientContext = false;
var inFunctionBody = false;
var inSwitchStatement = 0 /* NotNested */;
var inIterationStatement = 0 /* NotNested */;
var labelledStatementInfo = (function () {
var functionBoundarySentinel;
var currentLabelSet;
var labelSetStack;
var isIterationStack;
function addLabel(label) {
if (!currentLabelSet) {
currentLabelSet = {};
}
currentLabelSet[label.text] = true;
}
function pushCurrentLabelSet(isIterationStatement) {
if (!labelSetStack && !isIterationStack) {
labelSetStack = [];
isIterationStack = [];
}
ts.Debug.assert(currentLabelSet !== undefined);
labelSetStack.push(currentLabelSet);
isIterationStack.push(isIterationStatement);
currentLabelSet = undefined;
}
function pushFunctionBoundary() {
if (!functionBoundarySentinel) {
functionBoundarySentinel = {};
if (!labelSetStack && !isIterationStack) {
labelSetStack = [];
isIterationStack = [];
}
}
ts.Debug.assert(currentLabelSet === undefined);
labelSetStack.push(functionBoundarySentinel);
isIterationStack.push(false);
}
function pop() {
ts.Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined);
labelSetStack.pop();
isIterationStack.pop();
}
function nodeIsNestedInLabel(label, requireIterationStatement, stopAtFunctionBoundary) {
if (!requireIterationStatement && currentLabelSet && ts.hasProperty(currentLabelSet, label.text)) {
return 1 /* Nested */;
}
if (!labelSetStack) {
return 0 /* NotNested */;
}
var crossedFunctionBoundary = false;
for (var i = labelSetStack.length - 1; i >= 0; i--) {
var labelSet = labelSetStack[i];
if (labelSet === functionBoundarySentinel) {
if (stopAtFunctionBoundary) {
break;
}
else {
crossedFunctionBoundary = true;
continue;
}
}
if (requireIterationStatement && isIterationStack[i] === false) {
continue;
}
if (ts.hasProperty(labelSet, label.text)) {
return crossedFunctionBoundary ? 2 /* CrossingFunctionBoundary */ : 1 /* Nested */;
}
}
return 0 /* NotNested */;
}
return {
addLabel: addLabel,
pushCurrentLabelSet: pushCurrentLabelSet,
pushFunctionBoundary: pushFunctionBoundary,
pop: pop,
nodeIsNestedInLabel: nodeIsNestedInLabel
};
})();
function getLineAndCharacterlFromSourcePosition(position) {
if (!lineStarts) {
lineStarts = ts.getLineStarts(sourceText);
}
return ts.getLineAndCharacterOfPosition(lineStarts, position);
}
function getPositionFromSourceLineAndCharacter(line, character) {
if (!lineStarts) {
lineStarts = ts.getLineStarts(sourceText);
}
return ts.getPositionFromLineAndCharacter(lineStarts, line, character);
}
function error(message, arg0, arg1, arg2) {
var start = scanner.getTokenPos();
var length = scanner.getTextPos() - start;
errorAtPos(start, length, message, arg0, arg1, arg2);
}
function grammarErrorOnNode(node, message, arg0, arg1, arg2) {
var span = getErrorSpanForNode(node);
var start = span.end > span.pos ? ts.skipTrivia(file.text, span.pos) : span.pos;
var length = span.end - start;
file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2));
}
function reportInvalidUseInStrictMode(node) {
var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end);
grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name);
}
function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) {
file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2));
}
function errorAtPos(start, length, message, arg0, arg1, arg2) {
var lastErrorPos = file.syntacticErrors.length ? file.syntacticErrors[file.syntacticErrors.length - 1].start : -1;
if (start !== lastErrorPos) {
file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2));
}
if (lookAheadMode === 1 /* NoErrorYet */) {
lookAheadMode = 2 /* Error */;
}
}
function scanError(message) {
var pos = scanner.getTextPos();
errorAtPos(pos, 0, message);
}
function onComment(pos, end) {
if (commentRanges)
commentRanges.push({ pos: pos, end: end });
}
function getNodePos() {
return scanner.getStartPos();
}
function getNodeEnd() {
return scanner.getStartPos();
}
function nextToken() {
return token = scanner.scan();
}
function getTokenPos(pos) {
return ts.skipTrivia(sourceText, pos);
}
function reScanGreaterToken() {
return token = scanner.reScanGreaterToken();
}
function reScanSlashToken() {
return token = scanner.reScanSlashToken();
}
function reScanTemplateToken() {
return token = scanner.reScanTemplateToken();
}
function lookAheadHelper(callback, alwaysResetState) {
var saveToken = token;
var saveSyntacticErrorsLength = file.syntacticErrors.length;
var saveLookAheadMode = lookAheadMode;
lookAheadMode = 1 /* NoErrorYet */;
var result = callback();
ts.Debug.assert(lookAheadMode === 2 /* Error */ || lookAheadMode === 1 /* NoErrorYet */);
if (lookAheadMode === 2 /* Error */) {
result = undefined;
}
lookAheadMode = saveLookAheadMode;
if (!result || alwaysResetState) {
token = saveToken;
file.syntacticErrors.length = saveSyntacticErrorsLength;
}
return result;
}
function lookAhead(callback) {
var result;
scanner.tryScan(function () {
result = lookAheadHelper(callback, true);
return false;
});
return result;
}
function tryParse(callback) {
return scanner.tryScan(function () { return lookAheadHelper(callback, false); });
}
function isIdentifier() {
return token === 63 /* Identifier */ || (isInStrictMode ? token > 108 /* LastFutureReservedWord */ : token > 99 /* LastReservedWord */);
}
function parseExpected(t) {
if (token === t) {
nextToken();
return true;
}
error(ts.Diagnostics._0_expected, ts.tokenToString(t));
return false;
}
function parseOptional(t) {
if (token === t) {
nextToken();
return true;
}
return false;
}
function canParseSemicolon() {
if (token === 21 /* SemicolonToken */) {
return true;
}
return token === 14 /* CloseBraceToken */ || token === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak();
}
function parseSemicolon() {
if (canParseSemicolon()) {
if (token === 21 /* SemicolonToken */) {
nextToken();
}
}
else {
error(ts.Diagnostics._0_expected, ";");
}
}
function createNode(kind, pos) {
nodeCount++;
var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))();
if (!(pos >= 0))
pos = scanner.getStartPos();
node.pos = pos;
node.end = pos;
return node;
}
function finishNode(node) {
node.end = scanner.getStartPos();
return node;
}
function createMissingNode() {
return createNode(120 /* Missing */);
}
function internIdentifier(text) {
text = escapeIdentifier(text);
return ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text);
}
function createIdentifier(isIdentifier) {
identifierCount++;
if (isIdentifier) {
var node = createNode(63 /* Identifier */);
node.text = internIdentifier(scanner.getTokenValue());
nextToken();
return finishNode(node);
}
error(ts.Diagnostics.Identifier_expected);
var node = createMissingNode();
node.text = "";
return node;
}
function parseIdentifier() {
return createIdentifier(isIdentifier());
}
function parseIdentifierName() {
return createIdentifier(token >= 63 /* Identifier */);
}
function isPropertyName() {
return token >= 63 /* Identifier */ || token === 7 /* StringLiteral */ || token === 6 /* NumericLiteral */;
}
function parsePropertyName() {
if (token === 7 /* StringLiteral */ || token === 6 /* NumericLiteral */) {
return parseLiteralNode(true);
}
return parseIdentifierName();
}
function parseContextualModifier(t) {
return token === t && tryParse(function () {
nextToken();
return token === 17 /* OpenBracketToken */ || isPropertyName();
});
}
function parseAnyContextualModifier() {
return isModifier(token) && tryParse(function () {
nextToken();
return token === 17 /* OpenBracketToken */ || isPropertyName();
});
}
function isListElement(kind, inErrorRecovery) {
switch (kind) {
case 0 /* SourceElements */:
case 1 /* ModuleElements */:
return isSourceElement(inErrorRecovery);
case 2 /* BlockStatements */:
case 4 /* SwitchClauseStatements */:
return isStatement(inErrorRecovery);
case 3 /* SwitchClauses */:
return token === 65 /* CaseKeyword */ || token === 71 /* DefaultKeyword */;
case 5 /* TypeMembers */:
return isStartOfTypeMember();
case 6 /* ClassMembers */:
return lookAhead(isClassMemberStart);
case 7 /* EnumMembers */:
case 11 /* ObjectLiteralMembers */:
return isPropertyName();
case 8 /* BaseTypeReferences */:
return isIdentifier() && ((token !== 77 /* ExtendsKeyword */ && token !== 100 /* ImplementsKeyword */) || !lookAhead(function () { return (nextToken(), isIdentifier()); }));
case 9 /* VariableDeclarations */:
case 14 /* TypeParameters */:
return isIdentifier();
case 10 /* ArgumentExpressions */:
return token === 22 /* CommaToken */ || isStartOfExpression();
case 12 /* ArrayLiteralMembers */:
return token === 22 /* CommaToken */ || isStartOfExpression();
case 13 /* Parameters */:
return isStartOfParameter();
case 15 /* TypeArguments */:
case 16 /* TupleElementTypes */:
return token === 22 /* CommaToken */ || isStartOfType();
}
ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
}
function isListTerminator(kind) {
if (token === 1 /* EndOfFileToken */) {
return true;
}
switch (kind) {
case 1 /* ModuleElements */:
case 2 /* BlockStatements */:
case 3 /* SwitchClauses */:
case 5 /* TypeMembers */:
case 6 /* ClassMembers */:
case 7 /* EnumMembers */:
case 11 /* ObjectLiteralMembers */:
return token === 14 /* CloseBraceToken */;
case 4 /* SwitchClauseStatements */:
return token === 14 /* CloseBraceToken */ || token === 65 /* CaseKeyword */ || token === 71 /* DefaultKeyword */;
case 8 /* BaseTypeReferences */:
return token === 13 /* OpenBraceToken */ || token === 77 /* ExtendsKeyword */ || token === 100 /* ImplementsKeyword */;
case 9 /* VariableDeclarations */:
return isVariableDeclaratorListTerminator();
case 14 /* TypeParameters */:
return token === 24 /* GreaterThanToken */ || token === 15 /* OpenParenToken */ || token === 13 /* OpenBraceToken */ || token === 77 /* ExtendsKeyword */ || token === 100 /* ImplementsKeyword */;
case 10 /* ArgumentExpressions */:
return token === 16 /* CloseParenToken */ || token === 21 /* SemicolonToken */;
case 12 /* ArrayLiteralMembers */:
case 16 /* TupleElementTypes */:
return token === 18 /* CloseBracketToken */;
case 13 /* Parameters */:
return token === 16 /* CloseParenToken */ || token === 18 /* CloseBracketToken */ || token === 13 /* OpenBraceToken */;
case 15 /* TypeArguments */:
return token === 24 /* GreaterThanToken */ || token === 15 /* OpenParenToken */;
}
}
function isVariableDeclaratorListTerminator() {
if (canParseSemicolon()) {
return true;
}
if (token === 84 /* InKeyword */) {
return true;
}
if (token === 31 /* EqualsGreaterThanToken */) {
return true;
}
return false;
}
function isInSomeParsingContext() {
for (var kind = 0; kind < 17 /* Count */; kind++) {
if (parsingContext & (1 << kind)) {
if (isListElement(kind, true) || isListTerminator(kind)) {
return true;
}
}
}
return false;
}
function parseList(kind, checkForStrictMode, parseElement) {
var saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
var result = [];
result.pos = getNodePos();
var saveIsInStrictMode = isInStrictMode;
while (!isListTerminator(kind)) {
if (isListElement(kind, false)) {
var element = parseElement();
result.push(element);
if (!isInStrictMode && checkForStrictMode) {
if (isPrologueDirective(element)) {
if (isUseStrictPrologueDirective(element)) {
isInStrictMode = true;
checkForStrictMode = false;
}
}
else {
checkForStrictMode = false;
}
}
}
else {
error(parsingContextErrors(kind));
if (isInSomeParsingContext()) {
break;
}
nextToken();
}
}
isInStrictMode = saveIsInStrictMode;
result.end = getNodeEnd();
parsingContext = saveParsingContext;
return result;
}
function parseDelimitedList(kind, parseElement, allowTrailingComma) {
var saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
var result = [];
result.pos = getNodePos();
var errorCountBeforeParsingList = file.syntacticErrors.length;
var commaStart = -1;
while (true) {
if (isListElement(kind, false)) {
result.push(parseElement());
commaStart = scanner.getTokenPos();
if (parseOptional(22 /* CommaToken */)) {
continue;
}
commaStart = -1;
if (isListTerminator(kind)) {
break;
}
error(ts.Diagnostics._0_expected, ",");
}
else if (isListTerminator(kind)) {
break;
}
else {
error(parsingContextErrors(kind));
if (isInSomeParsingContext()) {
break;
}
nextToken();
}
}
if (commaStart >= 0) {
if (!allowTrailingComma) {
if (file.syntacticErrors.length === errorCountBeforeParsingList) {
grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed);
}
}
result.hasTrailingComma = true;
}
result.end = getNodeEnd();
parsingContext = saveParsingContext;
return result;
}
function createMissingList() {
var pos = getNodePos();
var result = [];
result.pos = pos;
result.end = pos;
return result;
}
function createNodeArray(node) {
var result = [node];
result.pos = node.pos;
result.end = node.end;
return result;
}
function parseBracketedList(kind, parseElement, startToken, endToken) {
if (parseExpected(startToken)) {
var result = parseDelimitedList(kind, parseElement, false);
parseExpected(endToken);
return result;
}
return createMissingList();
}
function parseEntityName(allowReservedWords) {
var entity = parseIdentifier();
while (parseOptional(19 /* DotToken */)) {
var node = createNode(121 /* QualifiedName */, entity.pos);
node.left = entity;
node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier();
entity = finishNode(node);
}
return entity;
}
function parseTokenNode() {
var node = createNode(token);
nextToken();
return finishNode(node);
}
function parseTemplateExpression() {
var template = createNode(155 /* TemplateExpression */);
template.head = parseLiteralNode();
ts.Debug.assert(template.head.kind === 10 /* TemplateHead */, "Template head has wrong token kind");
var templateSpans = [];
templateSpans.pos = getNodePos();
do {
templateSpans.push(parseTemplateSpan());
} while (templateSpans[templateSpans.length - 1].literal.kind === 11 /* TemplateMiddle */);
templateSpans.end = getNodeEnd();
template.templateSpans = templateSpans;
return finishNode(template);
}
function parseTemplateSpan() {
var span = createNode(156 /* TemplateSpan */);
span.expression = parseExpression(false);
var literal;
if (token === 14 /* CloseBraceToken */) {
reScanTemplateToken();
literal = parseLiteralNode();
}
else {
error(ts.Diagnostics.Invalid_template_literal_expected);
literal = createMissingNode();
literal.text = "";
}
span.literal = literal;
return finishNode(span);
}
function parseLiteralNode(internName) {
var node = createNode(token);
var text = scanner.getTokenValue();
node.text = internName ? internIdentifier(text) : text;
var tokenPos = scanner.getTokenPos();
nextToken();
finishNode(node);
if (node.kind === 6 /* NumericLiteral */ && sourceText.charCodeAt(tokenPos) === 48 /* _0 */ && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
if (isInStrictMode) {
grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode);
}
else if (languageVersion >= 1 /* ES5 */) {
grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher);
}
}
return node;
}
function parseStringLiteral() {
if (token === 7 /* StringLiteral */) {
return parseLiteralNode(true);
}
error(ts.Diagnostics.String_literal_expected);
return createMissingNode();
}
function parseTypeReference() {
var node = createNode(132 /* TypeReference */);
node.typeName = parseEntityName(false);
if (!scanner.hasPrecedingLineBreak() && token === 23 /* LessThanToken */) {
node.typeArguments = parseTypeArguments();
}
return finishNode(node);
}
function parseTypeQuery() {
var node = createNode(133 /* TypeQuery */);
parseExpected(95 /* TypeOfKeyword */);
node.exprName = parseEntityName(true);
return finishNode(node);
}
function parseTypeParameter() {
var node = createNode(122 /* TypeParameter */);
node.name = parseIdentifier();
if (parseOptional(77 /* ExtendsKeyword */)) {
if (isStartOfType() || !isStartOfExpression()) {
node.constraint = parseType();
}
else {
var expr = parseUnaryExpression();
grammarErrorOnNode(expr, ts.Diagnostics.Type_expected);
}
}
return finishNode(node);
}
function parseTypeParameters() {
if (token === 23 /* LessThanToken */) {
var pos = getNodePos();
var result = parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 23 /* LessThanToken */, 24 /* GreaterThanToken */);
if (!result.length) {
var start = getTokenPos(pos);
var length = getNodePos() - start;
errorAtPos(start, length, ts.Diagnostics.Type_parameter_list_cannot_be_empty);
}
return result;
}
}
function parseParameterType() {
return parseOptional(50 /* ColonToken */) ? token === 7 /* StringLiteral */ ? parseStringLiteral() : parseType() : undefined;
}
function isStartOfParameter() {
return token === 20 /* DotDotDotToken */ || isIdentifier() || isModifier(token);
}
function parseParameter(flags) {
if (flags === void 0) { flags = 0; }
var node = createNode(123 /* Parameter */);
node.flags |= parseAndCheckModifiers(3 /* Parameters */);
if (parseOptional(20 /* DotDotDotToken */)) {
node.flags |= 8 /* Rest */;
}
node.name = parseIdentifier();
if (node.name.kind === 120 /* Missing */ && node.flags === 0 && isModifier(token)) {
nextToken();
}
if (parseOptional(49 /* QuestionToken */)) {
node.flags |= 4 /* QuestionMark */;
}
node.type = parseParameterType();
node.initializer = parseInitializer(true);
return finishNode(node);
}
function parseSignature(kind, returnToken, returnTokenRequired) {
if (kind === 130 /* ConstructSignature */) {
parseExpected(86 /* NewKeyword */);
}
var typeParameters = parseTypeParameters();
var parameters = parseParameterList(15 /* OpenParenToken */, 16 /* CloseParenToken */);
checkParameterList(parameters);
var type;
if (returnTokenRequired) {
parseExpected(returnToken);
type = parseType();
}
else if (parseOptional(returnToken)) {
type = parseType();
}
return {
typeParameters: typeParameters,
parameters: parameters,
type: type
};
}
function parseParameterList(startDelimiter, endDelimiter) {
return parseBracketedList(13 /* Parameters */, parseParameter, startDelimiter, endDelimiter);
}
function checkParameterList(parameters) {
var seenOptionalParameter = false;
var parameterCount = parameters.length;
for (var i = 0; i < parameterCount; i++) {
var parameter = parameters[i];
if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) {
reportInvalidUseInStrictMode(parameter.name);
return;
}
else if (parameter.flags & 8 /* Rest */) {
if (i !== (parameterCount - 1)) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);
return;
}
if (parameter.flags & 4 /* QuestionMark */) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional);
return;
}
if (parameter.initializer) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer);
return;
}
}
else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) {
seenOptionalParameter = true;
if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
return;
}
}
else {
if (seenOptionalParameter) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter);
return;
}
}
}
}
function parseSignatureMember(kind, returnToken) {
var node = createNode(kind);
var sig = parseSignature(kind, returnToken, false);
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
parseSemicolon();
return finishNode(node);
}
function parseIndexSignatureMember() {
var node = createNode(131 /* IndexSignature */);
var errorCountBeforeIndexSignature = file.syntacticErrors.length;
var indexerStart = scanner.getTokenPos();
node.parameters = parseParameterList(17 /* OpenBracketToken */, 18 /* CloseBracketToken */);
var indexerLength = scanner.getStartPos() - indexerStart;
node.type = parseTypeAnnotation();
parseSemicolon();
if (file.syntacticErrors.length === errorCountBeforeIndexSignature) {
checkIndexSignature(node, indexerStart, indexerLength);
}
return finishNode(node);
}
function checkIndexSignature(node, indexerStart, indexerLength) {
var parameter = node.parameters[0];
if (node.parameters.length !== 1) {
var arityDiagnostic = ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter;
if (parameter) {
grammarErrorOnNode(parameter.name, arityDiagnostic);
}
else {
grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic);
}
return;
}
else if (parameter.flags & 8 /* Rest */) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);
return;
}
else if (parameter.flags & 243 /* Modifier */) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier);
return;
}
else if (parameter.flags & 4 /* QuestionMark */) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark);
return;
}
else if (parameter.initializer) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer);
return;
}
else if (!parameter.type) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
return;
}
else if (parameter.type.kind !== 118 /* StringKeyword */ && parameter.type.kind !== 116 /* NumberKeyword */) {
grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number);
return;
}
else if (!node.type) {
grammarErrorAtPos(indexerStart, indexerLength, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
return;
}
}
function parsePropertyOrMethod() {
var node = createNode(0 /* Unknown */);
node.name = parsePropertyName();
if (parseOptional(49 /* QuestionToken */)) {
node.flags |= 4 /* QuestionMark */;
}
if (token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) {
node.kind = 125 /* Method */;
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
}
else {
node.kind = 124 /* Property */;
node.type = parseTypeAnnotation();
}
parseSemicolon();
return finishNode(node);
}
function isStartOfTypeMember() {
switch (token) {
case 15 /* OpenParenToken */:
case 23 /* LessThanToken */:
case 17 /* OpenBracketToken */:
return true;
default:
return isPropertyName() && lookAhead(function () { return nextToken() === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */ || token === 49 /* QuestionToken */ || token === 50 /* ColonToken */ || canParseSemicolon(); });
}
}
function parseTypeMember() {
switch (token) {
case 15 /* OpenParenToken */:
case 23 /* LessThanToken */:
return parseSignatureMember(129 /* CallSignature */, 50 /* ColonToken */);
case 17 /* OpenBracketToken */:
return parseIndexSignatureMember();
case 86 /* NewKeyword */:
if (lookAhead(function () { return nextToken() === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */; })) {
return parseSignatureMember(130 /* ConstructSignature */, 50 /* ColonToken */);
}
case 7 /* StringLiteral */:
case 6 /* NumericLiteral */:
return parsePropertyOrMethod();
default:
if (token >= 63 /* Identifier */) {
return parsePropertyOrMethod();
}
}
}
function parseTypeLiteral() {
var node = createNode(134 /* TypeLiteral */);
if (parseExpected(13 /* OpenBraceToken */)) {
node.members = parseList(5 /* TypeMembers */, false, parseTypeMember);
parseExpected(14 /* CloseBraceToken */);
}
else {
node.members = createMissingList();
}
return finishNode(node);
}
function parseTupleType() {
var node = createNode(136 /* TupleType */);
var startTokenPos = scanner.getTokenPos();
var startErrorCount = file.syntacticErrors.length;
node.elementTypes = parseBracketedList(16 /* TupleElementTypes */, parseType, 17 /* OpenBracketToken */, 18 /* CloseBracketToken */);
if (!node.elementTypes.length && file.syntacticErrors.length === startErrorCount) {
grammarErrorAtPos(startTokenPos, scanner.getStartPos() - startTokenPos, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty);
}
return finishNode(node);
}
function parseParenType() {
var node = createNode(138 /* ParenType */);
parseExpected(15 /* OpenParenToken */);
node.type = parseType();
parseExpected(16 /* CloseParenToken */);
return finishNode(node);
}
function parseFunctionType(signatureKind) {
var node = createNode(134 /* TypeLiteral */);
var member = createNode(signatureKind);
var sig = parseSignature(signatureKind, 31 /* EqualsGreaterThanToken */, true);
member.typeParameters = sig.typeParameters;
member.parameters = sig.parameters;
member.type = sig.type;
finishNode(member);
node.members = createNodeArray(member);
return finishNode(node);
}
function parseKeywordAndNoDot() {
var node = parseTokenNode();
return token === 19 /* DotToken */ ? undefined : node;
}
function parseNonArrayType() {
switch (token) {
case 109 /* AnyKeyword */:
case 118 /* StringKeyword */:
case 116 /* NumberKeyword */:
case 110 /* BooleanKeyword */:
case 97 /* VoidKeyword */:
var node = tryParse(parseKeywordAndNoDot);
return node || parseTypeReference();
case 95 /* TypeOfKeyword */:
return parseTypeQuery();
case 13 /* OpenBraceToken */:
return parseTypeLiteral();
case 17 /* OpenBracketToken */:
return parseTupleType();
case 15 /* OpenParenToken */:
return parseParenType();
default:
if (isIdentifier()) {
return parseTypeReference();
}
}
error(ts.Diagnostics.Type_expected);
return createMissingNode();
}
function isStartOfType() {
switch (token) {
case 109 /* AnyKeyword */:
case 118 /* StringKeyword */:
case 116 /* NumberKeyword */:
case 110 /* BooleanKeyword */:
case 97 /* VoidKeyword */:
case 95 /* TypeOfKeyword */:
case 13 /* OpenBraceToken */:
case 17 /* OpenBracketToken */:
case 23 /* LessThanToken */:
case 86 /* NewKeyword */:
return true;
case 15 /* OpenParenToken */:
return lookAhead(function () {
nextToken();
return token === 16 /* CloseParenToken */ || isStartOfParameter() || isStartOfType();
});
default:
return isIdentifier();
}
}
function parsePrimaryType() {
var type = parseNonArrayType();
while (!scanner.hasPrecedingLineBreak() && parseOptional(17 /* OpenBracketToken */)) {
parseExpected(18 /* CloseBracketToken */);
var node = createNode(135 /* ArrayType */, type.pos);
node.elementType = type;
type = finishNode(node);
}
return type;
}
function parseUnionType() {
var type = parsePrimaryType();
if (token === 43 /* BarToken */) {
var types = [type];
types.pos = type.pos;
while (parseOptional(43 /* BarToken */)) {
types.push(parsePrimaryType());
}
types.end = getNodeEnd();
var node = createNode(137 /* UnionType */, type.pos);
node.types = types;
type = finishNode(node);
}
return type;
}
function isStartOfFunctionType() {
return token === 23 /* LessThanToken */ || token === 15 /* OpenParenToken */ && lookAhead(function () {
nextToken();
if (token === 16 /* CloseParenToken */ || token === 20 /* DotDotDotToken */) {
return true;
}
if (isIdentifier() || isModifier(token)) {
nextToken();
if (token === 50 /* ColonToken */ || token === 22 /* CommaToken */ || token === 49 /* QuestionToken */ || token === 51 /* EqualsToken */ || isIdentifier() || isModifier(token)) {
return true;
}
if (token === 16 /* CloseParenToken */) {
nextToken();
if (token === 31 /* EqualsGreaterThanToken */) {
return true;
}
}
}
return false;
});
}
function parseType() {
if (isStartOfFunctionType()) {
return parseFunctionType(129 /* CallSignature */);
}
if (token === 86 /* NewKeyword */) {
return parseFunctionType(130 /* ConstructSignature */);
}
return parseUnionType();
}
function parseTypeAnnotation() {
return parseOptional(50 /* ColonToken */) ? parseType() : undefined;
}
function isStartOfExpression() {
switch (token) {
case 91 /* ThisKeyword */:
case 89 /* SuperKeyword */:
case 87 /* NullKeyword */:
case 93 /* TrueKeyword */:
case 78 /* FalseKeyword */:
case 6 /* NumericLiteral */:
case 7 /* StringLiteral */:
case 9 /* NoSubstitutionTemplateLiteral */:
case 10 /* TemplateHead */:
case 15 /* OpenParenToken */:
case 17 /* OpenBracketToken */:
case 13 /* OpenBraceToken */:
case 81 /* FunctionKeyword */:
case 86 /* NewKeyword */:
case 35 /* SlashToken */:
case 55 /* SlashEqualsToken */:
case 32 /* PlusToken */:
case 33 /* MinusToken */:
case 46 /* TildeToken */:
case 45 /* ExclamationToken */:
case 72 /* DeleteKeyword */:
case 95 /* TypeOfKeyword */:
case 97 /* VoidKeyword */:
case 37 /* PlusPlusToken */:
case 38 /* MinusMinusToken */:
case 23 /* LessThanToken */:
case 63 /* Identifier */:
return true;
default:
return isIdentifier();
}
}
function isStartOfExpressionStatement() {
return token !== 13 /* OpenBraceToken */ && token !== 81 /* FunctionKeyword */ && isStartOfExpression();
}
function parseExpression(noIn) {
var expr = parseAssignmentExpression(noIn);
while (parseOptional(22 /* CommaToken */)) {
expr = makeBinaryExpression(expr, 22 /* CommaToken */, parseAssignmentExpression(noIn));
}
return expr;
}
function parseInitializer(inParameter, noIn) {
if (token !== 51 /* EqualsToken */) {
if (scanner.hasPrecedingLineBreak() || (inParameter && token === 13 /* OpenBraceToken */) || !isStartOfExpression()) {
return undefined;
}
}
parseExpected(51 /* EqualsToken */);
return parseAssignmentExpression(noIn);
}
function parseAssignmentExpression(noIn) {
var arrowExpression = tryParseParenthesizedArrowFunctionExpression();
if (arrowExpression) {
return arrowExpression;
}
var expr = parseConditionalExpression(noIn);
if (expr.kind === 63 /* Identifier */ && token === 31 /* EqualsGreaterThanToken */) {
return parseSimpleArrowFunctionExpression(expr);
}
if (isLeftHandSideExpression(expr) && isAssignmentOperator()) {
if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) {
reportInvalidUseInStrictMode(expr);
}
var operator = token;
nextToken();
return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn));
}
return expr;
}
function isLeftHandSideExpression(expr) {
if (expr) {
switch (expr.kind) {
case 142 /* PropertyAccess */:
case 143 /* IndexedAccess */:
case 145 /* NewExpression */:
case 144 /* CallExpression */:
case 146 /* TaggedTemplateExpression */:
case 139 /* ArrayLiteral */:
case 148 /* ParenExpression */:
case 140 /* ObjectLiteral */:
case 149 /* FunctionExpression */:
case 63 /* Identifier */:
case 120 /* Missing */:
case 8 /* RegularExpressionLiteral */:
case 6 /* NumericLiteral */:
case 7 /* StringLiteral */:
case 9 /* NoSubstitutionTemplateLiteral */:
case 155 /* TemplateExpression */:
case 78 /* FalseKeyword */:
case 87 /* NullKeyword */:
case 91 /* ThisKeyword */:
case 93 /* TrueKeyword */:
case 89 /* SuperKeyword */:
return true;
}
}
return false;
}
function parseSimpleArrowFunctionExpression(identifier) {
ts.Debug.assert(token === 31 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
parseExpected(31 /* EqualsGreaterThanToken */);
var parameter = createNode(123 /* Parameter */, identifier.pos);
parameter.name = identifier;
finishNode(parameter);
var parameters = [];
parameters.push(parameter);
parameters.pos = parameter.pos;
parameters.end = parameter.end;
var signature = { parameters: parameters };
return parseArrowExpressionTail(identifier.pos, signature, false);
}
function tryParseParenthesizedArrowFunctionExpression() {
var triState = isParenthesizedArrowFunctionExpression();
if (triState === 0 /* False */) {
return undefined;
}
var pos = getNodePos();
if (triState === 1 /* True */) {
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
if (parseExpected(31 /* EqualsGreaterThanToken */) || token === 13 /* OpenBraceToken */) {
return parseArrowExpressionTail(pos, sig, false);
}
else {
return makeFunctionExpression(150 /* ArrowFunction */, pos, undefined, sig, createMissingNode());
}
}
var sig = tryParseSignatureIfArrowOrBraceFollows();
if (sig) {
parseExpected(31 /* EqualsGreaterThanToken */);
return parseArrowExpressionTail(pos, sig, false);
}
else {
return undefined;
}
}
function isParenthesizedArrowFunctionExpression() {
if (token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) {
return lookAhead(function () {
var first = token;
var second = nextToken();
if (first === 15 /* OpenParenToken */) {
if (second === 16 /* CloseParenToken */) {
var third = nextToken();
switch (third) {
case 31 /* EqualsGreaterThanToken */:
case 50 /* ColonToken */:
case 13 /* OpenBraceToken */:
return 1 /* True */;
default:
return 0 /* False */;
}
}
if (second === 20 /* DotDotDotToken */) {
return 1 /* True */;
}
if (!isIdentifier()) {
return 0 /* False */;
}
if (nextToken() === 50 /* ColonToken */) {
return 1 /* True */;
}
return 2 /* Unknown */;
}
else {
ts.Debug.assert(first === 23 /* LessThanToken */);
if (!isIdentifier()) {
return 0 /* False */;
}
return 2 /* Unknown */;
}
});
}
if (token === 31 /* EqualsGreaterThanToken */) {
return 1 /* True */;
}
return 0 /* False */;
}
function tryParseSignatureIfArrowOrBraceFollows() {
return tryParse(function () {
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
if (token === 31 /* EqualsGreaterThanToken */ || token === 13 /* OpenBraceToken */) {
return sig;
}
return undefined;
});
}
function parseArrowExpressionTail(pos, sig, noIn) {
var body;
if (token === 13 /* OpenBraceToken */) {
body = parseBody(false);
}
else if (isStatement(true) && !isStartOfExpressionStatement() && token !== 81 /* FunctionKeyword */) {
body = parseBody(true);
}
else {
body = parseAssignmentExpression(noIn);
}
return makeFunctionExpression(150 /* ArrowFunction */, pos, undefined, sig, body);
}
function isAssignmentOperator() {
return token >= 51 /* FirstAssignment */ && token <= 62 /* LastAssignment */;
}
function parseConditionalExpression(noIn) {
var expr = parseBinaryExpression(noIn);
while (parseOptional(49 /* QuestionToken */)) {
var node = createNode(154 /* ConditionalExpression */, expr.pos);
node.condition = expr;
node.whenTrue = parseAssignmentExpression(false);
parseExpected(50 /* ColonToken */);
node.whenFalse = parseAssignmentExpression(noIn);
expr = finishNode(node);
}
return expr;
}
function parseBinaryExpression(noIn) {
return parseBinaryOperators(parseUnaryExpression(), 0, noIn);
}
function parseBinaryOperators(expr, minPrecedence, noIn) {
while (true) {
reScanGreaterToken();
var precedence = getOperatorPrecedence();
if (precedence && precedence > minPrecedence && (!noIn || token !== 84 /* InKeyword */)) {
var operator = token;
nextToken();
expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence, noIn));
continue;
}
return expr;
}
}
function getOperatorPrecedence() {
switch (token) {
case 48 /* BarBarToken */:
return 1;
case 47 /* AmpersandAmpersandToken */:
return 2;
case 43 /* BarToken */:
return 3;
case 44 /* CaretToken */:
return 4;
case 42 /* AmpersandToken */:
return 5;
case 27 /* EqualsEqualsToken */:
case 28 /* ExclamationEqualsToken */:
case 29 /* EqualsEqualsEqualsToken */:
case 30 /* ExclamationEqualsEqualsToken */:
return 6;
case 23 /* LessThanToken */:
case 24 /* GreaterThanToken */:
case 25 /* LessThanEqualsToken */:
case 26 /* GreaterThanEqualsToken */:
case 85 /* InstanceOfKeyword */:
case 84 /* InKeyword */:
return 7;
case 39 /* LessThanLessThanToken */:
case 40 /* GreaterThanGreaterThanToken */:
case 41 /* GreaterThanGreaterThanGreaterThanToken */:
return 8;
case 32 /* PlusToken */:
case 33 /* MinusToken */:
return 9;
case 34 /* AsteriskToken */:
case 35 /* SlashToken */:
case 36 /* PercentToken */:
return 10;
}
return undefined;
}
function makeBinaryExpression(left, operator, right) {
var node = createNode(153 /* BinaryExpression */, left.pos);
node.left = left;
node.operator = operator;
node.right = right;
return finishNode(node);
}
function parseUnaryExpression() {
var pos = getNodePos();
switch (token) {
case 32 /* PlusToken */:
case 33 /* MinusToken */:
case 46 /* TildeToken */:
case 45 /* ExclamationToken */:
case 72 /* DeleteKeyword */:
case 95 /* TypeOfKeyword */:
case 97 /* VoidKeyword */:
case 37 /* PlusPlusToken */:
case 38 /* MinusMinusToken */:
var operator = token;
nextToken();
var operand = parseUnaryExpression();
if (isInStrictMode) {
if ((operator === 37 /* PlusPlusToken */ || operator === 38 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) {
reportInvalidUseInStrictMode(operand);
}
else if (operator === 72 /* DeleteKeyword */ && operand.kind === 63 /* Identifier */) {
grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode);
}
}
return makeUnaryExpression(151 /* PrefixOperator */, pos, operator, operand);
case 23 /* LessThanToken */:
return parseTypeAssertion();
}
var primaryExpression = parsePrimaryExpression();
var illegalUsageOfSuperKeyword = primaryExpression.kind === 89 /* SuperKeyword */ && token !== 15 /* OpenParenToken */ && token !== 19 /* DotToken */;
if (illegalUsageOfSuperKeyword) {
error(ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
}
var expr = parseCallAndAccess(primaryExpression, false);
ts.Debug.assert(isLeftHandSideExpression(expr));
if ((token === 37 /* PlusPlusToken */ || token === 38 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) {
if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) {
reportInvalidUseInStrictMode(expr);
}
var operator = token;
nextToken();
expr = makeUnaryExpression(152 /* PostfixOperator */, expr.pos, operator, expr);
}
return expr;
}
function parseTypeAssertion() {
var node = createNode(147 /* TypeAssertion */);
parseExpected(23 /* LessThanToken */);
node.type = parseType();
parseExpected(24 /* GreaterThanToken */);
node.operand = parseUnaryExpression();
return finishNode(node);
}
function makeUnaryExpression(kind, pos, operator, operand) {
var node = createNode(kind, pos);
node.operator = operator;
node.operand = operand;
return finishNode(node);
}
function parseCallAndAccess(expr, inNewExpression) {
while (true) {
var dotOrBracketStart = scanner.getTokenPos();
if (parseOptional(19 /* DotToken */)) {
var propertyAccess = createNode(142 /* PropertyAccess */, expr.pos);
if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord() && lookAhead(function () { return scanner.isReservedWord(); })) {
grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, ts.Diagnostics.Identifier_expected);
var id = createMissingNode();
}
else {
var id = parseIdentifierName();
}
propertyAccess.left = expr;
propertyAccess.right = id;
expr = finishNode(propertyAccess);
continue;
}
if (parseOptional(17 /* OpenBracketToken */)) {
var indexedAccess = createNode(143 /* IndexedAccess */, expr.pos);
indexedAccess.object = expr;
if (inNewExpression && parseOptional(18 /* CloseBracketToken */)) {
indexedAccess.index = createMissingNode();
grammarErrorAtPos(dotOrBracketStart, scanner.getStartPos() - dotOrBracketStart, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead);
}
else {
indexedAccess.index = parseExpression();
if (indexedAccess.index.kind === 7 /* StringLiteral */ || indexedAccess.index.kind === 6 /* NumericLiteral */) {
var literal = indexedAccess.index;
literal.text = internIdentifier(literal.text);
}
parseExpected(18 /* CloseBracketToken */);
}
expr = finishNode(indexedAccess);
continue;
}
if ((token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) && !inNewExpression) {
var callExpr = createNode(144 /* CallExpression */, expr.pos);
callExpr.func = expr;
if (token === 23 /* LessThanToken */) {
if (!(callExpr.typeArguments = tryParse(parseTypeArgumentsAndOpenParen)))
return expr;
}
else {
parseExpected(15 /* OpenParenToken */);
}
callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false);
parseExpected(16 /* CloseParenToken */);
expr = finishNode(callExpr);
continue;
}
if (token === 9 /* NoSubstitutionTemplateLiteral */ || token === 10 /* TemplateHead */) {
var tagExpression = createNode(146 /* TaggedTemplateExpression */, expr.pos);
tagExpression.tag = expr;
tagExpression.template = token === 9 /* NoSubstitutionTemplateLiteral */ ? parseLiteralNode() : parseTemplateExpression();
expr = finishNode(tagExpression);
if (languageVersion < 2 /* ES6 */) {
grammarErrorOnNode(expr, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
continue;
}
return expr;
}
}
function parseTypeArgumentsAndOpenParen() {
var result = parseTypeArguments();
parseExpected(15 /* OpenParenToken */);
return result;
}
function parseTypeArguments() {
var typeArgumentListStart = scanner.getTokenPos();
var errorCountBeforeTypeParameterList = file.syntacticErrors.length;
var result = parseBracketedList(15 /* TypeArguments */, parseSingleTypeArgument, 23 /* LessThanToken */, 24 /* GreaterThanToken */);
if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) {
grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, ts.Diagnostics.Type_argument_list_cannot_be_empty);
}
return result;
}
function parseSingleTypeArgument() {
if (token === 22 /* CommaToken */) {
var errorStart = scanner.getTokenPos();
var errorLength = scanner.getTextPos() - errorStart;
grammarErrorAtPos(errorStart, errorLength, ts.Diagnostics.Type_expected);
return createNode(120 /* Missing */);
}
return parseType();
}
function parsePrimaryExpression() {
switch (token) {
case 91 /* ThisKeyword */:
case 89 /* SuperKeyword */:
case 87 /* NullKeyword */:
case 93 /* TrueKeyword */:
case 78 /* FalseKeyword */:
return parseTokenNode();
case 6 /* NumericLiteral */:
case 7 /* StringLiteral */:
case 9 /* NoSubstitutionTemplateLiteral */:
return parseLiteralNode();
case 15 /* OpenParenToken */:
return parseParenExpression();
case 17 /* OpenBracketToken */:
return parseArrayLiteral();
case 13 /* OpenBraceToken */:
return parseObjectLiteral();
case 81 /* FunctionKeyword */:
return parseFunctionExpression();
case 86 /* NewKeyword */:
return parseNewExpression();
case 35 /* SlashToken */:
case 55 /* SlashEqualsToken */:
if (reScanSlashToken() === 8 /* RegularExpressionLiteral */) {
return parseLiteralNode();
}
break;
case 10 /* TemplateHead */:
return parseTemplateExpression();
default:
if (isIdentifier()) {
return parseIdentifier();
}
}
error(ts.Diagnostics.Expression_expected);
return createMissingNode();
}
function parseParenExpression() {
var node = createNode(148 /* ParenExpression */);
parseExpected(15 /* OpenParenToken */);
node.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
return finishNode(node);
}
function parseAssignmentExpressionOrOmittedExpression(omittedExpressionDiagnostic) {
if (token === 22 /* CommaToken */) {
if (omittedExpressionDiagnostic) {
var errorStart = scanner.getTokenPos();
var errorLength = scanner.getTextPos() - errorStart;
grammarErrorAtPos(errorStart, errorLength, omittedExpressionDiagnostic);
}
return createNode(157 /* OmittedExpression */);
}
return parseAssignmentExpression();
}
function parseArrayLiteralElement() {
return parseAssignmentExpressionOrOmittedExpression(undefined);
}
function parseArgumentExpression() {
return parseAssignmentExpressionOrOmittedExpression(ts.Diagnostics.Argument_expression_expected);
}
function parseArrayLiteral() {
var node = createNode(139 /* ArrayLiteral */);
parseExpected(17 /* OpenBracketToken */);
if (scanner.hasPrecedingLineBreak())
node.flags |= 256 /* MultiLine */;
node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, true);
parseExpected(18 /* CloseBracketToken */);
return finishNode(node);
}
function parsePropertyAssignment() {
var node = createNode(141 /* PropertyAssignment */);
node.name = parsePropertyName();
if (token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) {
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
var body = parseBody(false);
node.initializer = makeFunctionExpression(149 /* FunctionExpression */, node.pos, undefined, sig, body);
}
else {
parseExpected(50 /* ColonToken */);
node.initializer = parseAssignmentExpression(false);
}
return finishNode(node);
}
function parseObjectLiteralMember() {
var initialPos = getNodePos();
var initialToken = token;
if (parseContextualModifier(113 /* GetKeyword */) || parseContextualModifier(117 /* SetKeyword */)) {
var kind = initialToken === 113 /* GetKeyword */ ? 127 /* GetAccessor */ : 128 /* SetAccessor */;
return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0);
}
return parsePropertyAssignment();
}
function parseObjectLiteral() {
var node = createNode(140 /* ObjectLiteral */);
parseExpected(13 /* OpenBraceToken */);
if (scanner.hasPrecedingLineBreak()) {
node.flags |= 256 /* MultiLine */;
}
node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, true);
parseExpected(14 /* CloseBraceToken */);
var seen = {};
var Property = 1;
var GetAccessor = 2;
var SetAccesor = 4;
var GetOrSetAccessor = GetAccessor | SetAccesor;
ts.forEach(node.properties, function (p) {
if (p.kind === 157 /* OmittedExpression */) {
return;
}
var name = p.name;
var currentKind;
if (p.kind === 141 /* PropertyAssignment */) {
currentKind = Property;
}
else if (p.kind === 127 /* GetAccessor */) {
currentKind = GetAccessor;
}
else if (p.kind === 128 /* SetAccessor */) {
currentKind = SetAccesor;
}
else {
ts.Debug.fail("Unexpected syntax kind:" + p.kind);
}
if (!ts.hasProperty(seen, name.text)) {
seen[name.text] = currentKind;
}
else {
var existingKind = seen[name.text];
if (currentKind === Property && existingKind === Property) {
if (isInStrictMode) {
grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode);
}
}
else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
seen[name.text] = currentKind | existingKind;
}
else {
grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
}
}
else {
grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
}
}
});
return finishNode(node);
}
function parseFunctionExpression() {
var pos = getNodePos();
parseExpected(81 /* FunctionKeyword */);
var name = isIdentifier() ? parseIdentifier() : undefined;
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
var body = parseBody(false);
if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) {
reportInvalidUseInStrictMode(name);
}
return makeFunctionExpression(149 /* FunctionExpression */, pos, name, sig, body);
}
function makeFunctionExpression(kind, pos, name, sig, body) {
var node = createNode(kind, pos);
node.name = name;
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
node.body = body;
return finishNode(node);
}
function parseNewExpression() {
var node = createNode(145 /* NewExpression */);
parseExpected(86 /* NewKeyword */);
node.func = parseCallAndAccess(parsePrimaryExpression(), true);
if (parseOptional(15 /* OpenParenToken */) || token === 23 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) {
node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseArgumentExpression, false);
parseExpected(16 /* CloseParenToken */);
}
return finishNode(node);
}
function parseStatementAllowingLetDeclaration() {
return parseStatement(true);
}
function parseBlock(ignoreMissingOpenBrace, checkForStrictMode) {
var node = createNode(158 /* Block */);
if (parseExpected(13 /* OpenBraceToken */) || ignoreMissingOpenBrace) {
node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatementAllowingLetDeclaration);
parseExpected(14 /* CloseBraceToken */);
}
else {
node.statements = createMissingList();
}
return finishNode(node);
}
function parseBody(ignoreMissingOpenBrace) {
var saveInFunctionBody = inFunctionBody;
var saveInSwitchStatement = inSwitchStatement;
var saveInIterationStatement = inIterationStatement;
inFunctionBody = true;
if (inSwitchStatement === 1 /* Nested */) {
inSwitchStatement = 2 /* CrossingFunctionBoundary */;
}
if (inIterationStatement === 1 /* Nested */) {
inIterationStatement = 2 /* CrossingFunctionBoundary */;
}
labelledStatementInfo.pushFunctionBoundary();
var block = parseBlock(ignoreMissingOpenBrace, true);
block.kind = 183 /* FunctionBlock */;
labelledStatementInfo.pop();
inFunctionBody = saveInFunctionBody;
inSwitchStatement = saveInSwitchStatement;
inIterationStatement = saveInIterationStatement;
return block;
}
function parseEmptyStatement() {
var node = createNode(160 /* EmptyStatement */);
parseExpected(21 /* SemicolonToken */);
return finishNode(node);
}
function parseIfStatement() {
var node = createNode(162 /* IfStatement */);
parseExpected(82 /* IfKeyword */);
parseExpected(15 /* OpenParenToken */);
node.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
node.thenStatement = parseStatement(false);
node.elseStatement = parseOptional(74 /* ElseKeyword */) ? parseStatement(false) : undefined;
return finishNode(node);
}
function parseDoStatement() {
var node = createNode(163 /* DoStatement */);
parseExpected(73 /* DoKeyword */);
var saveInIterationStatement = inIterationStatement;
inIterationStatement = 1 /* Nested */;
node.statement = parseStatement(false);
inIterationStatement = saveInIterationStatement;
parseExpected(98 /* WhileKeyword */);
parseExpected(15 /* OpenParenToken */);
node.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
parseOptional(21 /* SemicolonToken */);
return finishNode(node);
}
function parseWhileStatement() {
var node = createNode(164 /* WhileStatement */);
parseExpected(98 /* WhileKeyword */);
parseExpected(15 /* OpenParenToken */);
node.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
var saveInIterationStatement = inIterationStatement;
inIterationStatement = 1 /* Nested */;
node.statement = parseStatement(false);
inIterationStatement = saveInIterationStatement;
return finishNode(node);
}
function parseForOrForInStatement() {
var pos = getNodePos();
parseExpected(80 /* ForKeyword */);
parseExpected(15 /* OpenParenToken */);
if (token !== 21 /* SemicolonToken */) {
if (parseOptional(96 /* VarKeyword */)) {
var declarations = parseVariableDeclarationList(0, true);
if (!declarations.length) {
error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
}
}
else if (parseOptional(102 /* LetKeyword */)) {
var declarations = parseVariableDeclarationList(2048 /* Let */, true);
if (!declarations.length) {
error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
}
if (languageVersion < 2 /* ES6 */) {
grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
}
else if (parseOptional(68 /* ConstKeyword */)) {
var declarations = parseVariableDeclarationList(4096 /* Const */, true);
if (!declarations.length) {
error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
}
if (languageVersion < 2 /* ES6 */) {
grammarErrorAtPos(declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
}
else {
var varOrInit = parseExpression(true);
}
}
var forOrForInStatement;
if (parseOptional(84 /* InKeyword */)) {
var forInStatement = createNode(166 /* ForInStatement */, pos);
if (declarations) {
if (declarations.length > 1) {
error(ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement);
}
forInStatement.declaration = declarations[0];
}
else {
forInStatement.variable = varOrInit;
}
forInStatement.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
forOrForInStatement = forInStatement;
}
else {
var forStatement = createNode(165 /* ForStatement */, pos);
if (declarations)
forStatement.declarations = declarations;
if (varOrInit)
forStatement.initializer = varOrInit;
parseExpected(21 /* SemicolonToken */);
if (token !== 21 /* SemicolonToken */ && token !== 16 /* CloseParenToken */) {
forStatement.condition = parseExpression();
}
parseExpected(21 /* SemicolonToken */);
if (token !== 16 /* CloseParenToken */) {
forStatement.iterator = parseExpression();
}
parseExpected(16 /* CloseParenToken */);
forOrForInStatement = forStatement;
}
var saveInIterationStatement = inIterationStatement;
inIterationStatement = 1 /* Nested */;
forOrForInStatement.statement = parseStatement(false);
inIterationStatement = saveInIterationStatement;
return finishNode(forOrForInStatement);
}
function parseBreakOrContinueStatement(kind) {
var node = createNode(kind);
var errorCountBeforeStatement = file.syntacticErrors.length;
parseExpected(kind === 168 /* BreakStatement */ ? 64 /* BreakKeyword */ : 69 /* ContinueKeyword */);
if (!canParseSemicolon())
node.label = parseIdentifier();
parseSemicolon();
finishNode(node);
if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) {
if (node.label) {
checkBreakOrContinueStatementWithLabel(node);
}
else {
checkBareBreakOrContinueStatement(node);
}
}
return node;
}
function checkBareBreakOrContinueStatement(node) {
if (node.kind === 168 /* BreakStatement */) {
if (inIterationStatement === 1 /* Nested */ || inSwitchStatement === 1 /* Nested */) {
return;
}
else if (inIterationStatement === 0 /* NotNested */ && inSwitchStatement === 0 /* NotNested */) {
grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement);
return;
}
}
else if (node.kind === 167 /* ContinueStatement */) {
if (inIterationStatement === 1 /* Nested */) {
return;
}
else if (inIterationStatement === 0 /* NotNested */) {
grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement);
return;
}
}
else {
ts.Debug.fail("checkAnonymousBreakOrContinueStatement");
}
ts.Debug.assert(inIterationStatement === 2 /* CrossingFunctionBoundary */ || inSwitchStatement === 2 /* CrossingFunctionBoundary */);
grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
}
function checkBreakOrContinueStatementWithLabel(node) {
var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, node.kind === 167 /* ContinueStatement */, false);
if (nodeIsNestedInLabel === 1 /* Nested */) {
return;
}
if (nodeIsNestedInLabel === 2 /* CrossingFunctionBoundary */) {
grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
return;
}
if (node.kind === 167 /* ContinueStatement */) {
grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
}
else if (node.kind === 168 /* BreakStatement */) {
grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement);
}
else {
ts.Debug.fail("checkBreakOrContinueStatementWithLabel");
}
}
function parseReturnStatement() {
var node = createNode(169 /* ReturnStatement */);
var errorCountBeforeReturnStatement = file.syntacticErrors.length;
var returnTokenStart = scanner.getTokenPos();
var returnTokenLength = scanner.getTextPos() - returnTokenStart;
parseExpected(88 /* ReturnKeyword */);
if (!canParseSemicolon())
node.expression = parseExpression();
parseSemicolon();
if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) {
grammarErrorAtPos(returnTokenStart, returnTokenLength, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
}
return finishNode(node);
}
function parseWithStatement() {
var node = createNode(170 /* WithStatement */);
var startPos = scanner.getTokenPos();
parseExpected(99 /* WithKeyword */);
var endPos = scanner.getStartPos();
parseExpected(15 /* OpenParenToken */);
node.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
node.statement = parseStatement(false);
node = finishNode(node);
if (isInStrictMode) {
grammarErrorAtPos(startPos, endPos - startPos, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
}
return node;
}
function parseCaseClause() {
var node = createNode(172 /* CaseClause */);
parseExpected(65 /* CaseKeyword */);
node.expression = parseExpression();
parseExpected(50 /* ColonToken */);
node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatementAllowingLetDeclaration);
return finishNode(node);
}
function parseDefaultClause() {
var node = createNode(173 /* DefaultClause */);
parseExpected(71 /* DefaultKeyword */);
parseExpected(50 /* ColonToken */);
node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatementAllowingLetDeclaration);
return finishNode(node);
}
function parseCaseOrDefaultClause() {
return token === 65 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
}
function parseSwitchStatement() {
var node = createNode(171 /* SwitchStatement */);
parseExpected(90 /* SwitchKeyword */);
parseExpected(15 /* OpenParenToken */);
node.expression = parseExpression();
parseExpected(16 /* CloseParenToken */);
parseExpected(13 /* OpenBraceToken */);
var saveInSwitchStatement = inSwitchStatement;
inSwitchStatement = 1 /* Nested */;
node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause);
inSwitchStatement = saveInSwitchStatement;
parseExpected(14 /* CloseBraceToken */);
var defaultClauses = ts.filter(node.clauses, function (clause) { return clause.kind === 173 /* DefaultClause */; });
for (var i = 1, n = defaultClauses.length; i < n; i++) {
var clause = defaultClauses[i];
var start = ts.skipTrivia(file.text, clause.pos);
var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end;
grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement);
}
return finishNode(node);
}
function parseThrowStatement() {
var node = createNode(175 /* ThrowStatement */);
parseExpected(92 /* ThrowKeyword */);
if (scanner.hasPrecedingLineBreak()) {
error(ts.Diagnostics.Line_break_not_permitted_here);
}
node.expression = parseExpression();
parseSemicolon();
return finishNode(node);
}
function parseTryStatement() {
var node = createNode(176 /* TryStatement */);
node.tryBlock = parseTokenAndBlock(94 /* TryKeyword */, 177 /* TryBlock */);
if (token === 66 /* CatchKeyword */) {
node.catchBlock = parseCatchBlock();
}
if (token === 79 /* FinallyKeyword */) {
node.finallyBlock = parseTokenAndBlock(79 /* FinallyKeyword */, 179 /* FinallyBlock */);
}
if (!(node.catchBlock || node.finallyBlock)) {
error(ts.Diagnostics.catch_or_finally_expected);
}
return finishNode(node);
}
function parseTokenAndBlock(token, kind) {
var pos = getNodePos();
parseExpected(token);
var result = parseBlock(false, false);
result.kind = kind;
result.pos = pos;
return result;
}
function parseCatchBlock() {
var pos = getNodePos();
parseExpected(66 /* CatchKeyword */);
parseExpected(15 /* OpenParenToken */);
var variable = parseIdentifier();
var typeAnnotationColonStart = scanner.getTokenPos();
var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart;
var typeAnnotation = parseTypeAnnotation();
parseExpected(16 /* CloseParenToken */);
var result = parseBlock(false, false);
result.kind = 178 /* CatchBlock */;
result.pos = pos;
result.variable = variable;
if (typeAnnotation) {
errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation);
}
if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) {
reportInvalidUseInStrictMode(variable);
}
return result;
}
function parseDebuggerStatement() {
var node = createNode(180 /* DebuggerStatement */);
parseExpected(70 /* DebuggerKeyword */);
parseSemicolon();
return finishNode(node);
}
function isIterationStatementStart() {
return token === 98 /* WhileKeyword */ || token === 73 /* DoKeyword */ || token === 80 /* ForKeyword */;
}
function parseStatementWithLabelSet(allowLetAndConstDeclarations) {
labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart());
var statement = parseStatement(allowLetAndConstDeclarations);
labelledStatementInfo.pop();
return statement;
}
function isLabel() {
return isIdentifier() && lookAhead(function () { return nextToken() === 50 /* ColonToken */; });
}
function parseLabeledStatement(allowLetAndConstDeclarations) {
var node = createNode(174 /* LabeledStatement */);
node.label = parseIdentifier();
parseExpected(50 /* ColonToken */);
if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) {
grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label));
}
labelledStatementInfo.addLabel(node.label);
node.statement = isLabel() ? parseLabeledStatement(allowLetAndConstDeclarations) : parseStatementWithLabelSet(allowLetAndConstDeclarations);
return finishNode(node);
}
function parseExpressionStatement() {
var node = createNode(161 /* ExpressionStatement */);
node.expression = parseExpression();
parseSemicolon();
return finishNode(node);
}
function isStatement(inErrorRecovery) {
switch (token) {
case 21 /* SemicolonToken */:
return !inErrorRecovery;
case 13 /* OpenBraceToken */:
case 96 /* VarKeyword */:
case 102 /* LetKeyword */:
case 81 /* FunctionKeyword */:
case 82 /* IfKeyword */:
case 73 /* DoKeyword */:
case 98 /* WhileKeyword */:
case 80 /* ForKeyword */:
case 69 /* ContinueKeyword */:
case 64 /* BreakKeyword */:
case 88 /* ReturnKeyword */:
case 99 /* WithKeyword */:
case 90 /* SwitchKeyword */:
case 92 /* ThrowKeyword */:
case 94 /* TryKeyword */:
case 70 /* DebuggerKeyword */:
case 66 /* CatchKeyword */:
case 79 /* FinallyKeyword */:
return true;
case 68 /* ConstKeyword */:
var isConstEnum = lookAhead(function () { return nextToken() === 75 /* EnumKeyword */; });
return !isConstEnum;
case 101 /* InterfaceKeyword */:
case 67 /* ClassKeyword */:
case 114 /* ModuleKeyword */:
case 75 /* EnumKeyword */:
case 119 /* TypeKeyword */:
if (isDeclarationStart()) {
return false;
}
case 106 /* PublicKeyword */:
case 104 /* PrivateKeyword */:
case 105 /* ProtectedKeyword */:
case 107 /* StaticKeyword */:
if (lookAhead(function () { return nextToken() >= 63 /* Identifier */; })) {
return false;
}
default:
return isStartOfExpression();
}
}
function parseStatement(allowLetAndConstDeclarations) {
switch (token) {
case 13 /* OpenBraceToken */:
return parseBlock(false, false);
case 96 /* VarKeyword */:
case 102 /* LetKeyword */:
case 68 /* ConstKeyword */:
return parseVariableStatement(allowLetAndConstDeclarations);
case 81 /* FunctionKeyword */:
return parseFunctionDeclaration();
case 21 /* SemicolonToken */:
return parseEmptyStatement();
case 82 /* IfKeyword */:
return parseIfStatement();
case 73 /* DoKeyword */:
return parseDoStatement();
case 98 /* WhileKeyword */:
return parseWhileStatement();
case 80 /* ForKeyword */:
return parseForOrForInStatement();
case 69 /* ContinueKeyword */:
return parseBreakOrContinueStatement(167 /* ContinueStatement */);
case 64 /* BreakKeyword */:
return parseBreakOrContinueStatement(168 /* BreakStatement */);
case 88 /* ReturnKeyword */:
return parseReturnStatement();
case 99 /* WithKeyword */:
return parseWithStatement();
case 90 /* SwitchKeyword */:
return parseSwitchStatement();
case 92 /* ThrowKeyword */:
return parseThrowStatement();
case 94 /* TryKeyword */:
case 66 /* CatchKeyword */:
case 79 /* FinallyKeyword */:
return parseTryStatement();
case 70 /* DebuggerKeyword */:
return parseDebuggerStatement();
default:
if (isLabel()) {
return parseLabeledStatement(allowLetAndConstDeclarations);
}
return parseExpressionStatement();
}
}
function parseAndCheckFunctionBody(isConstructor) {
var initialPosition = scanner.getTokenPos();
var errorCountBeforeBody = file.syntacticErrors.length;
if (token === 13 /* OpenBraceToken */) {
var body = parseBody(false);
if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) {
var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context;
grammarErrorAtPos(initialPosition, 1, diagnostic);
}
return body;
}
if (canParseSemicolon()) {
parseSemicolon();
return undefined;
}
error(ts.Diagnostics.Block_or_expected);
}
function parseVariableDeclaration(flags, noIn) {
var node = createNode(181 /* VariableDeclaration */);
node.flags = flags;
var errorCountBeforeVariableDeclaration = file.syntacticErrors.length;
node.name = parseIdentifier();
node.type = parseTypeAnnotation();
var initializerStart = scanner.getTokenPos();
var initializerFirstTokenLength = scanner.getTextPos() - initializerStart;
node.initializer = parseInitializer(false, noIn);
if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) {
grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
if (!inAmbientContext && !node.initializer && flags & 4096 /* Const */) {
grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized);
}
if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) {
reportInvalidUseInStrictMode(node.name);
}
return finishNode(node);
}
function parseVariableDeclarationList(flags, noIn) {
return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, false);
}
function parseVariableStatement(allowLetAndConstDeclarations, pos, flags) {
var node = createNode(159 /* VariableStatement */, pos);
if (flags)
node.flags = flags;
var errorCountBeforeVarStatement = file.syntacticErrors.length;
if (token === 102 /* LetKeyword */) {
node.flags |= 2048 /* Let */;
}
else if (token === 68 /* ConstKeyword */) {
node.flags |= 4096 /* Const */;
}
else if (token !== 96 /* VarKeyword */) {
error(ts.Diagnostics.var_let_or_const_expected);
}
nextToken();
node.declarations = parseVariableDeclarationList(node.flags, false);
parseSemicolon();
finishNode(node);
if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) {
grammarErrorOnNode(node, ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
}
if (languageVersion < 2 /* ES6 */) {
if (node.flags & 2048 /* Let */) {
grammarErrorOnNode(node, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
else if (node.flags & 4096 /* Const */) {
grammarErrorOnNode(node, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
}
else if (!allowLetAndConstDeclarations) {
if (node.flags & 2048 /* Let */) {
grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);
}
else if (node.flags & 4096 /* Const */) {
grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block);
}
}
return node;
}
function parseFunctionDeclaration(pos, flags) {
var node = createNode(182 /* FunctionDeclaration */, pos);
if (flags)
node.flags = flags;
parseExpected(81 /* FunctionKeyword */);
node.name = parseIdentifier();
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
node.body = parseAndCheckFunctionBody(false);
if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name) && node.name.kind === 63 /* Identifier */) {
reportInvalidUseInStrictMode(node.name);
}
return finishNode(node);
}
function parseConstructorDeclaration(pos, flags) {
var node = createNode(126 /* Constructor */, pos);
node.flags = flags;
parseExpected(111 /* ConstructorKeyword */);
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
node.body = parseAndCheckFunctionBody(true);
if (node.typeParameters) {
grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
}
if (node.type) {
grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration);
}
return finishNode(node);
}
function parsePropertyMemberDeclaration(pos, flags) {
var errorCountBeforePropertyDeclaration = file.syntacticErrors.length;
var name = parsePropertyName();
var questionStart = scanner.getTokenPos();
if (parseOptional(49 /* QuestionToken */)) {
errorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_class_member_cannot_be_declared_optional);
}
if (token === 15 /* OpenParenToken */ || token === 23 /* LessThanToken */) {
var method = createNode(125 /* Method */, pos);
method.flags = flags;
method.name = name;
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
method.typeParameters = sig.typeParameters;
method.parameters = sig.parameters;
method.type = sig.type;
method.body = parseAndCheckFunctionBody(false);
return finishNode(method);
}
else {
var property = createNode(124 /* Property */, pos);
property.flags = flags;
property.name = name;
property.type = parseTypeAnnotation();
var initializerStart = scanner.getTokenPos();
var initializerFirstTokenLength = scanner.getTextPos() - initializerStart;
property.initializer = parseInitializer(false);
parseSemicolon();
if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) {
grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
return finishNode(property);
}
}
function parseAndCheckMemberAccessorDeclaration(kind, pos, flags) {
var errorCountBeforeAccessor = file.syntacticErrors.length;
var accessor = parseMemberAccessorDeclaration(kind, pos, flags);
if (errorCountBeforeAccessor === file.syntacticErrors.length) {
if (languageVersion < 1 /* ES5 */) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
}
else if (inAmbientContext) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
}
else if (accessor.typeParameters) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
}
else if (kind === 127 /* GetAccessor */ && accessor.parameters.length) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters);
}
else if (kind === 128 /* SetAccessor */) {
if (accessor.type) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
}
else if (accessor.parameters.length !== 1) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
}
else {
var parameter = accessor.parameters[0];
if (parameter.flags & 8 /* Rest */) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter);
}
else if (parameter.flags & 243 /* Modifier */) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
}
else if (parameter.flags & 4 /* QuestionMark */) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);
}
else if (parameter.initializer) {
grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer);
}
}
}
}
return accessor;
}
function parseMemberAccessorDeclaration(kind, pos, flags) {
var node = createNode(kind, pos);
node.flags = flags;
node.name = parsePropertyName();
var sig = parseSignature(129 /* CallSignature */, 50 /* ColonToken */, false);
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
if (inAmbientContext && canParseSemicolon()) {
parseSemicolon();
node.body = createMissingNode();
}
else {
node.body = parseBody(false);
}
return finishNode(node);
}
function isClassMemberStart() {
var idToken;
while (isModifier(token)) {
idToken = token;
nextToken();
}
if (isPropertyName()) {
idToken = token;
nextToken();
}
if (token === 17 /* OpenBracketToken */) {
return true;
}
if (idToken !== undefined) {
if (!isKeyword(idToken) || idToken === 117 /* SetKeyword */ || idToken === 113 /* GetKeyword */) {
return true;
}
switch (token) {
case 15 /* OpenParenToken */:
case 23 /* LessThanToken */:
case 50 /* ColonToken */:
case 51 /* EqualsToken */:
case 49 /* QuestionToken */:
return true;
default:
return canParseSemicolon();
}
}
return false;
}
function parseAndCheckModifiers(context) {
var flags = 0;
var lastStaticModifierStart;
var lastStaticModifierLength;
var lastDeclareModifierStart;
var lastDeclareModifierLength;
var lastPrivateModifierStart;
var lastPrivateModifierLength;
var lastProtectedModifierStart;
var lastProtectedModifierLength;
while (true) {
var modifierStart = scanner.getTokenPos();
var modifierToken = token;
if (!parseAnyContextualModifier())
break;
var modifierLength = scanner.getStartPos() - modifierStart;
switch (modifierToken) {
case 106 /* PublicKeyword */:
if (flags & 112 /* AccessibilityModifier */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen);
}
else if (flags & 128 /* Static */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "public", "static");
}
else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public");
}
flags |= 16 /* Public */;
break;
case 104 /* PrivateKeyword */:
if (flags & 112 /* AccessibilityModifier */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen);
}
else if (flags & 128 /* Static */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "private", "static");
}
else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private");
}
lastPrivateModifierStart = modifierStart;
lastPrivateModifierLength = modifierLength;
flags |= 32 /* Private */;
break;
case 105 /* ProtectedKeyword */:
if (flags & 16 /* Public */ || flags & 32 /* Private */ || flags & 64 /* Protected */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen);
}
else if (flags & 128 /* Static */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "protected", "static");
}
else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "protected");
}
lastProtectedModifierStart = modifierStart;
lastProtectedModifierLength = modifierLength;
flags |= 64 /* Protected */;
break;
case 107 /* StaticKeyword */:
if (flags & 128 /* Static */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "static");
}
else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static");
}
else if (context === 3 /* Parameters */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
}
lastStaticModifierStart = modifierStart;
lastStaticModifierLength = modifierLength;
flags |= 128 /* Static */;
break;
case 76 /* ExportKeyword */:
if (flags & 1 /* Export */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "export");
}
else if (flags & 2 /* Ambient */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare");
}
else if (context === 2 /* ClassMembers */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export");
}
else if (context === 3 /* Parameters */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
}
flags |= 1 /* Export */;
break;
case 112 /* DeclareKeyword */:
if (flags & 2 /* Ambient */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "declare");
}
else if (context === 2 /* ClassMembers */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
}
else if (context === 3 /* Parameters */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
}
else if (inAmbientContext && context === 1 /* ModuleElements */) {
grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
}
lastDeclareModifierStart = modifierStart;
lastDeclareModifierLength = modifierLength;
flags |= 2 /* Ambient */;
break;
}
}
if (token === 111 /* ConstructorKeyword */ && flags & 128 /* Static */) {
grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
}
else if (token === 111 /* ConstructorKeyword */ && flags & 32 /* Private */) {
grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private");
}
else if (token === 111 /* ConstructorKeyword */ && flags & 64 /* Protected */) {
grammarErrorAtPos(lastProtectedModifierStart, lastProtectedModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected");
}
else if (token === 83 /* ImportKeyword */) {
if (flags & 2 /* Ambient */) {
grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare");
}
}
else if (token === 101 /* InterfaceKeyword */) {
if (flags & 2 /* Ambient */) {
grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare");
}
}
else if (token !== 76 /* ExportKeyword */ && !(flags & 2 /* Ambient */) && inAmbientContext && context === 0 /* SourceElements */) {
var declarationStart = scanner.getTokenPos();
var declarationFirstTokenLength = scanner.getTextPos() - declarationStart;
grammarErrorAtPos(declarationStart, declarationFirstTokenLength, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
}
return flags;
}
function parseClassMemberDeclaration() {
var pos = getNodePos();
var flags = parseAndCheckModifiers(2 /* ClassMembers */);
if (parseContextualModifier(113 /* GetKeyword */)) {
return parseAndCheckMemberAccessorDeclaration(127 /* GetAccessor */, pos, flags);
}
if (parseContextualModifier(117 /* SetKeyword */)) {
return parseAndCheckMemberAccessorDeclaration(128 /* SetAccessor */, pos, flags);
}
if (token === 111 /* ConstructorKeyword */) {
return parseConstructorDeclaration(pos, flags);
}
if (token >= 63 /* Identifier */ || token === 7 /* StringLiteral */ || token === 6 /* NumericLiteral */) {
return parsePropertyMemberDeclaration(pos, flags);
}
if (token === 17 /* OpenBracketToken */) {
if (flags) {
var start = getTokenPos(pos);
var length = getNodePos() - start;
errorAtPos(start, length, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members);
}
return parseIndexSignatureMember();
}
ts.Debug.fail("Should not have attempted to parse class member declaration.");
}
function parseClassDeclaration(pos, flags) {
var node = createNode(184 /* ClassDeclaration */, pos);
node.flags = flags;
var errorCountBeforeClassDeclaration = file.syntacticErrors.length;
parseExpected(67 /* ClassKeyword */);
node.name = parseIdentifier();
node.typeParameters = parseTypeParameters();
node.baseType = parseOptional(77 /* ExtendsKeyword */) ? parseTypeReference() : undefined;
var implementsKeywordStart = scanner.getTokenPos();
var implementsKeywordLength;
if (parseOptional(100 /* ImplementsKeyword */)) {
implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart;
node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false);
}
var errorCountBeforeClassBody = file.syntacticErrors.length;
if (parseExpected(13 /* OpenBraceToken */)) {
node.members = parseList(6 /* ClassMembers */, false, parseClassMemberDeclaration);
parseExpected(14 /* CloseBraceToken */);
}
else {
node.members = createMissingList();
}
if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) {
grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "implements");
}
return finishNode(node);
}
function parseInterfaceDeclaration(pos, flags) {
var node = createNode(185 /* InterfaceDeclaration */, pos);
node.flags = flags;
var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length;
parseExpected(101 /* InterfaceKeyword */);
node.name = parseIdentifier();
node.typeParameters = parseTypeParameters();
var extendsKeywordStart = scanner.getTokenPos();
var extendsKeywordLength;
if (parseOptional(77 /* ExtendsKeyword */)) {
extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart;
node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, false);
}
var errorCountBeforeInterfaceBody = file.syntacticErrors.length;
node.members = parseTypeLiteral().members;
if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) {
grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "extends");
}
return finishNode(node);
}
function parseTypeAliasDeclaration(pos, flags) {
var node = createNode(186 /* TypeAliasDeclaration */, pos);
node.flags = flags;
parseExpected(119 /* TypeKeyword */);
node.name = parseIdentifier();
parseExpected(51 /* EqualsToken */);
node.type = parseType();
parseSemicolon();
return finishNode(node);
}
function parseAndCheckEnumDeclaration(pos, flags) {
var enumIsConst = flags & 4096 /* Const */;
function isIntegerLiteral(expression) {
function isInteger(literalExpression) {
return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text);
}
if (expression.kind === 151 /* PrefixOperator */) {
var unaryExpression = expression;
if (unaryExpression.operator === 32 /* PlusToken */ || unaryExpression.operator === 33 /* MinusToken */) {
expression = unaryExpression.operand;
}
}
if (expression.kind === 6 /* NumericLiteral */) {
return isInteger(expression);
}
return false;
}
var inConstantEnumMemberSection = true;
function parseAndCheckEnumMember() {
var node = createNode(192 /* EnumMember */);
var errorCountBeforeEnumMember = file.syntacticErrors.length;
node.name = parsePropertyName();
node.initializer = parseInitializer(false);
if (!enumIsConst) {
if (inAmbientContext) {
if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) {
grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers);
}
}
else if (node.initializer) {
inConstantEnumMemberSection = isIntegerLiteral(node.initializer);
}
else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) {
grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer);
}
}
return finishNode(node);
}
var node = createNode(187 /* EnumDeclaration */, pos);
node.flags = flags;
if (enumIsConst) {
parseExpected(68 /* ConstKeyword */);
}
parseExpected(75 /* EnumKeyword */);
node.name = parseIdentifier();
if (parseExpected(13 /* OpenBraceToken */)) {
node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, true);
parseExpected(14 /* CloseBraceToken */);
}
else {
node.members = createMissingList();
}
return finishNode(node);
}
function parseModuleBody() {
var node = createNode(189 /* ModuleBlock */);
if (parseExpected(13 /* OpenBraceToken */)) {
node.statements = parseList(1 /* ModuleElements */, false, parseModuleElement);
parseExpected(14 /* CloseBraceToken */);
}
else {
node.statements = createMissingList();
}
return finishNode(node);
}
function parseInternalModuleTail(pos, flags) {
var node = createNode(188 /* ModuleDeclaration */, pos);
node.flags = flags;
node.name = parseIdentifier();
if (parseOptional(19 /* DotToken */)) {
node.body = parseInternalModuleTail(getNodePos(), 1 /* Export */);
}
else {
node.body = parseModuleBody();
ts.forEach(node.body.statements, function (s) {
if (s.kind === 191 /* ExportAssignment */) {
grammarErrorOnNode(s, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module);
}
else if (s.kind === 190 /* ImportDeclaration */ && s.externalModuleName) {
grammarErrorOnNode(s, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module);
}
});
}
return finishNode(node);
}
function parseAmbientExternalModuleDeclaration(pos, flags) {
var node = createNode(188 /* ModuleDeclaration */, pos);
node.flags = flags;
node.name = parseStringLiteral();
if (!inAmbientContext) {
var errorCount = file.syntacticErrors.length;
if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) {
grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names);
}
}
var saveInAmbientContext = inAmbientContext;
inAmbientContext = true;
node.body = parseModuleBody();
inAmbientContext = saveInAmbientContext;
return finishNode(node);
}
function parseModuleDeclaration(pos, flags) {
parseExpected(114 /* ModuleKeyword */);
return token === 7 /* StringLiteral */ ? parseAmbientExternalModuleDeclaration(pos, flags) : parseInternalModuleTail(pos, flags);
}
function parseImportDeclaration(pos, flags) {
var node = createNode(190 /* ImportDeclaration */, pos);
node.flags = flags;
parseExpected(83 /* ImportKeyword */);
node.name = parseIdentifier();
parseExpected(51 /* EqualsToken */);
var entityName = parseEntityName(false);
if (entityName.kind === 63 /* Identifier */ && entityName.text === "require" && parseOptional(15 /* OpenParenToken */)) {
node.externalModuleName = parseStringLiteral();
parseExpected(16 /* CloseParenToken */);
}
else {
node.entityName = entityName;
}
parseSemicolon();
return finishNode(node);
}
function parseExportAssignmentTail(pos) {
var node = createNode(191 /* ExportAssignment */, pos);
node.exportName = parseIdentifier();
parseSemicolon();
return finishNode(node);
}
function isDeclarationStart() {
switch (token) {
case 96 /* VarKeyword */:
case 102 /* LetKeyword */:
case 68 /* ConstKeyword */:
case 81 /* FunctionKeyword */:
return true;
case 67 /* ClassKeyword */:
case 101 /* InterfaceKeyword */:
case 75 /* EnumKeyword */:
case 83 /* ImportKeyword */:
case 119 /* TypeKeyword */:
return lookAhead(function () { return nextToken() >= 63 /* Identifier */; });
case 114 /* ModuleKeyword */:
return lookAhead(function () { return nextToken() >= 63 /* Identifier */ || token === 7 /* StringLiteral */; });
case 76 /* ExportKeyword */:
return lookAhead(function () { return nextToken() === 51 /* EqualsToken */ || isDeclarationStart(); });
case 112 /* DeclareKeyword */:
case 106 /* PublicKeyword */:
case 104 /* PrivateKeyword */:
case 105 /* ProtectedKeyword */:
case 107 /* StaticKeyword */:
return lookAhead(function () {
nextToken();
return isDeclarationStart();
});
}
}
function parseDeclaration(modifierContext) {
var pos = getNodePos();
var errorCountBeforeModifiers = file.syntacticErrors.length;
var flags = parseAndCheckModifiers(modifierContext);
if (token === 76 /* ExportKeyword */) {
var modifiersEnd = scanner.getStartPos();
nextToken();
if (parseOptional(51 /* EqualsToken */)) {
var exportAssignmentTail = parseExportAssignmentTail(pos);
if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) {
var modifiersStart = ts.skipTrivia(sourceText, pos);
grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
}
return exportAssignmentTail;
}
}
var saveInAmbientContext = inAmbientContext;
if (flags & 2 /* Ambient */) {
inAmbientContext = true;
}
var result;
switch (token) {
case 96 /* VarKeyword */:
case 102 /* LetKeyword */:
result = parseVariableStatement(true, pos, flags);
break;
case 68 /* ConstKeyword */:
var isConstEnum = lookAhead(function () { return nextToken() === 75 /* EnumKeyword */; });
if (isConstEnum) {
result = parseAndCheckEnumDeclaration(pos, flags | 4096 /* Const */);
}
else {
result = parseVariableStatement(true, pos, flags);
}
break;
case 81 /* FunctionKeyword */:
result = parseFunctionDeclaration(pos, flags);
break;
case 67 /* ClassKeyword */:
result = parseClassDeclaration(pos, flags);
break;
case 101 /* InterfaceKeyword */:
result = parseInterfaceDeclaration(pos, flags);
break;
case 119 /* TypeKeyword */:
result = parseTypeAliasDeclaration(pos, flags);
break;
case 75 /* EnumKeyword */:
result = parseAndCheckEnumDeclaration(pos, flags);
break;
case 114 /* ModuleKeyword */:
result = parseModuleDeclaration(pos, flags);
break;
case 83 /* ImportKeyword */:
result = parseImportDeclaration(pos, flags);
break;
default:
error(ts.Diagnostics.Declaration_expected);
}
inAmbientContext = saveInAmbientContext;
return result;
}
function isSourceElement(inErrorRecovery) {
return isDeclarationStart() || isStatement(inErrorRecovery);
}
function parseSourceElement() {
return parseSourceElementOrModuleElement(0 /* SourceElements */);
}
function parseModuleElement() {
return parseSourceElementOrModuleElement(1 /* ModuleElements */);
}
function parseSourceElementOrModuleElement(modifierContext) {
if (isDeclarationStart()) {
return parseDeclaration(modifierContext);
}
var statementStart = scanner.getTokenPos();
var statementFirstTokenLength = scanner.getTextPos() - statementStart;
var errorCountBeforeStatement = file.syntacticErrors.length;
var statement = parseStatement(true);
if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) {
grammarErrorAtPos(statementStart, statementFirstTokenLength, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
}
return statement;
}
function processReferenceComments() {
var referencedFiles = [];
var amdDependencies = [];
commentRanges = [];
token = scanner.scan();
for (var i = 0; i < commentRanges.length; i++) {
var range = commentRanges[i];
var comment = sourceText.substring(range.pos, range.end);
var referencePathMatchResult = getFileReferenceFromReferencePath(comment, range);
if (referencePathMatchResult) {
var fileReference = referencePathMatchResult.fileReference;
file.hasNoDefaultLib = referencePathMatchResult.isNoDefaultLib;
var diagnostic = referencePathMatchResult.diagnostic;
if (fileReference) {
referencedFiles.push(fileReference);
}
if (diagnostic) {
errorAtPos(range.pos, range.end - range.pos, diagnostic);
}
}
else {
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s+path\s*=\s*('|")(.+?)\1/gim;
var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
if (amdDependencyMatchResult) {
amdDependencies.push(amdDependencyMatchResult[2]);
}
}
}
commentRanges = undefined;
return {
referencedFiles: referencedFiles,
amdDependencies: amdDependencies
};
}
function getExternalModuleIndicator() {
return ts.forEach(file.statements, function (node) { return node.flags & 1 /* Export */ || node.kind === 190 /* ImportDeclaration */ && node.externalModuleName || node.kind === 191 /* ExportAssignment */ ? node : undefined; });
}
scanner = ts.createScanner(languageVersion, true, sourceText, scanError, onComment);
var rootNodeFlags = 0;
if (ts.fileExtensionIs(filename, ".d.ts")) {
rootNodeFlags = 1024 /* DeclarationFile */;
inAmbientContext = true;
}
file = createRootNode(193 /* SourceFile */, 0, sourceText.length, rootNodeFlags);
file.filename = ts.normalizePath(filename);
file.text = sourceText;
file.getLineAndCharacterFromPosition = getLineAndCharacterlFromSourcePosition;
file.getPositionFromLineAndCharacter = getPositionFromSourceLineAndCharacter;
file.syntacticErrors = [];
file.semanticErrors = [];
var referenceComments = processReferenceComments();
file.referencedFiles = referenceComments.referencedFiles;
file.amdDependencies = referenceComments.amdDependencies;
file.statements = parseList(0 /* SourceElements */, true, parseSourceElement);
file.externalModuleIndicator = getExternalModuleIndicator();
file.nodeCount = nodeCount;
file.identifierCount = identifierCount;
file.version = version;
file.isOpen = isOpen;
file.languageVersion = languageVersion;
file.identifiers = identifiers;
return file;
}
ts.createSourceFile = createSourceFile;
function createProgram(rootNames, options, host) {
var program;
var files = [];
var filesByName = {};
var errors = [];
var seenNoDefaultLib = options.noLib;
var commonSourceDirectory;
ts.forEach(rootNames, function (name) { return processRootFile(name, false); });
if (!seenNoDefaultLib) {
processRootFile(host.getDefaultLibFilename(), true);
}
verifyCompilerOptions();
errors.sort(ts.compareDiagnostics);
program = {
getSourceFile: getSourceFile,
getSourceFiles: function () { return files; },
getCompilerOptions: function () { return options; },
getCompilerHost: function () { return host; },
getDiagnostics: getDiagnostics,
getGlobalDiagnostics: getGlobalDiagnostics,
getTypeChecker: function (fullTypeCheckMode) { return ts.createTypeChecker(program, fullTypeCheckMode); },
getCommonSourceDirectory: function () { return commonSourceDirectory; }
};
return program;
function getSourceFile(filename) {
filename = host.getCanonicalFileName(filename);
return ts.hasProperty(filesByName, filename) ? filesByName[filename] : undefined;
}
function getDiagnostics(sourceFile) {
return sourceFile ? ts.filter(errors, function (e) { return e.file === sourceFile; }) : errors;
}
function getGlobalDiagnostics() {
return ts.filter(errors, function (e) { return !e.file; });
}
function hasExtension(filename) {
return ts.getBaseFilename(filename).indexOf(".") >= 0;
}
function processRootFile(filename, isDefaultLib) {
processSourceFile(ts.normalizePath(filename), isDefaultLib);
}
function processSourceFile(filename, isDefaultLib, refFile, refPos, refEnd) {
if (refEnd !== undefined && refPos !== undefined) {
var start = refPos;
var length = refEnd - refPos;
}
var diagnostic;
if (hasExtension(filename)) {
if (!ts.fileExtensionIs(filename, ".ts")) {
diagnostic = ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts;
}
else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) {
diagnostic = ts.Diagnostics.File_0_not_found;
}
else if (refFile && host.getCanonicalFileName(filename) === host.getCanonicalFileName(refFile.filename)) {
diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself;
}
}
else {
if (!(findSourceFile(filename + ".ts", isDefaultLib, refFile, refPos, refEnd) || findSourceFile(filename + ".d.ts", isDefaultLib, refFile, refPos, refEnd))) {
diagnostic = ts.Diagnostics.File_0_not_found;
filename += ".ts";
}
}
if (diagnostic) {
if (refFile) {
errors.push(ts.createFileDiagnostic(refFile, start, length, diagnostic, filename));
}
else {
errors.push(ts.createCompilerDiagnostic(diagnostic, filename));
}
}
}
function findSourceFile(filename, isDefaultLib, refFile, refStart, refLength) {
var canonicalName = host.getCanonicalFileName(filename);
if (ts.hasProperty(filesByName, canonicalName)) {
var file = filesByName[canonicalName];
if (file && host.useCaseSensitiveFileNames() && canonicalName !== file.filename) {
errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, file.filename));
}
}
else {
var file = filesByName[canonicalName] = host.getSourceFile(filename, options.target, function (hostErrorMessage) {
errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage));
});
if (file) {
seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib;
if (!options.noResolve) {
var basePath = ts.getDirectoryPath(filename);
processReferencedFiles(file, basePath);
processImportedModules(file, basePath);
}
if (isDefaultLib) {
files.unshift(file);
}
else {
files.push(file);
}
ts.forEach(file.syntacticErrors, function (e) {
errors.push(e);
});
}
}
return file;
}
function processReferencedFiles(file, basePath) {
ts.forEach(file.referencedFiles, function (ref) {
var referencedFilename = ts.isRootedDiskPath(ref.filename) ? ref.filename : ts.combinePaths(basePath, ref.filename);
processSourceFile(ts.normalizePath(referencedFilename), false, file, ref.pos, ref.end);
});
}
function processImportedModules(file, basePath) {
ts.forEach(file.statements, function (node) {
if (node.kind === 190 /* ImportDeclaration */ && node.externalModuleName) {
var nameLiteral = node.externalModuleName;
var moduleName = nameLiteral.text;
if (moduleName) {
var searchPath = basePath;
while (true) {
var searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
if (findModuleSourceFile(searchName + ".ts", nameLiteral) || findModuleSourceFile(searchName + ".d.ts", nameLiteral)) {
break;
}
var parentPath = ts.getDirectoryPath(searchPath);
if (parentPath === searchPath) {
break;
}
searchPath = parentPath;
}
}
}
else if (node.kind === 188 /* ModuleDeclaration */ && node.name.kind === 7 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || isDeclarationFile(file))) {
forEachChild(node.body, function (node) {
if (node.kind === 190 /* ImportDeclaration */ && node.externalModuleName) {
var nameLiteral = node.externalModuleName;
var moduleName = nameLiteral.text;
if (moduleName) {
var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName));
var tsFile = findModuleSourceFile(searchName + ".ts", nameLiteral);
if (!tsFile) {
findModuleSourceFile(searchName + ".d.ts", nameLiteral);
}
}
}
});
}
});
function findModuleSourceFile(filename, nameLiteral) {
return findSourceFile(filename, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos);
}
}
function verifyCompilerOptions() {
if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) {
if (options.mapRoot) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option));
}
if (options.sourceRoot) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option));
}
return;
}
var firstExternalModule = ts.forEach(files, function (f) { return isExternalModule(f) ? f : undefined; });
if (firstExternalModule && options.module === 0 /* None */) {
var externalModuleErrorSpan = getErrorSpanForNode(firstExternalModule.externalModuleIndicator);
var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos);
var errorLength = externalModuleErrorSpan.end - errorStart;
errors.push(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided));
}
if (options.outDir || options.sourceRoot || (options.mapRoot && (!options.out || firstExternalModule !== undefined))) {
var commonPathComponents;
ts.forEach(files, function (sourceFile) {
if (!(sourceFile.flags & 1024 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.filename, ".js")) {
var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.filename, host.getCurrentDirectory());
sourcePathComponents.pop();
if (commonPathComponents) {
for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathComponents.length); i++) {
if (commonPathComponents[i] !== sourcePathComponents[i]) {
if (i === 0) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files));
return;
}
commonPathComponents.length = i;
break;
}
}
if (sourcePathComponents.length < commonPathComponents.length) {
commonPathComponents.length = sourcePathComponents.length;
}
}
else {
commonPathComponents = sourcePathComponents;
}
}
});
commonSourceDirectory = ts.getNormalizedPathFromPathComponents(commonPathComponents);
if (commonSourceDirectory) {
commonSourceDirectory += ts.directorySeparator;
}
}
}
}
ts.createProgram = createProgram;
})(ts || (ts = {}));
var ts;
(function (ts) {
function getModuleInstanceState(node) {
if (node.kind === 185 /* InterfaceDeclaration */) {
return 0 /* NonInstantiated */;
}
else if (node.kind === 187 /* EnumDeclaration */ && ts.isConstEnumDeclaration(node)) {
return 2 /* ConstEnumOnly */;
}
else if (node.kind === 190 /* ImportDeclaration */ && !(node.flags & 1 /* Export */)) {
return 0 /* NonInstantiated */;
}
else if (node.kind === 189 /* ModuleBlock */) {
var state = 0 /* NonInstantiated */;
ts.forEachChild(node, function (n) {
switch (getModuleInstanceState(n)) {
case 0 /* NonInstantiated */:
return false;
case 2 /* ConstEnumOnly */:
state = 2 /* ConstEnumOnly */;
return false;
case 1 /* Instantiated */:
state = 1 /* Instantiated */;
return true;
}
});
return state;
}
else if (node.kind === 188 /* ModuleDeclaration */) {
return getModuleInstanceState(node.body);
}
else {
return 1 /* Instantiated */;
}
}
ts.getModuleInstanceState = getModuleInstanceState;
function bindSourceFile(file) {
var parent;
var container;
var blockScopeContainer;
var lastContainer;
var symbolCount = 0;
var Symbol = ts.objectAllocator.getSymbolConstructor();
if (!file.locals) {
file.locals = {};
container = blockScopeContainer = file;
bind(file);
file.symbolCount = symbolCount;
}
function createSymbol(flags, name) {
symbolCount++;
return new Symbol(flags, name);
}
function addDeclarationToSymbol(symbol, node, symbolKind) {
symbol.flags |= symbolKind;
if (!symbol.declarations)
symbol.declarations = [];
symbol.declarations.push(node);
if (symbolKind & 1952 /* HasExports */ && !symbol.exports)
symbol.exports = {};
if (symbolKind & 6240 /* HasMembers */ && !symbol.members)
symbol.members = {};
node.symbol = symbol;
if (symbolKind & 107455 /* Value */ && !symbol.valueDeclaration)
symbol.valueDeclaration = node;
}
function getDeclarationName(node) {
if (node.name) {
if (node.kind === 188 /* ModuleDeclaration */ && node.name.kind === 7 /* StringLiteral */) {
return '"' + node.name.text + '"';
}
return node.name.text;
}
switch (node.kind) {
case 126 /* Constructor */: return "__constructor";
case 129 /* CallSignature */: return "__call";
case 130 /* ConstructSignature */: return "__new";
case 131 /* IndexSignature */: return "__index";
}
}
function getDisplayName(node) {
return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node);
}
function declareSymbol(symbols, parent, node, includes, excludes) {
var name = getDeclarationName(node);
if (name !== undefined) {
var symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, name));
if (symbol.flags & excludes) {
if (node.name) {
node.name.parent = node;
}
var message = symbol.flags & 2 /* BlockScopedVariable */ ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
ts.forEach(symbol.declarations, function (declaration) {
file.semanticErrors.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration)));
});
file.semanticErrors.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node)));
symbol = createSymbol(0, name);
}
}
else {
symbol = createSymbol(0, "__missing");
}
addDeclarationToSymbol(symbol, node, includes);
symbol.parent = parent;
if (node.kind === 184 /* ClassDeclaration */ && symbol.exports) {
var prototypeSymbol = createSymbol(4 /* Property */ | 536870912 /* Prototype */, "prototype");
if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) {
if (node.name) {
node.name.parent = node;
}
file.semanticErrors.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name));
}
symbol.exports[prototypeSymbol.name] = prototypeSymbol;
prototypeSymbol.parent = symbol;
}
return symbol;
}
function isAmbientContext(node) {
while (node) {
if (node.flags & 2 /* Ambient */)
return true;
node = node.parent;
}
return false;
}
function declareModuleMember(node, symbolKind, symbolExcludes) {
var exportKind = 0;
if (symbolKind & 107455 /* Value */) {
exportKind |= 4194304 /* ExportValue */;
}
if (symbolKind & 3152352 /* Type */) {
exportKind |= 8388608 /* ExportType */;
}
if (symbolKind & 1536 /* Namespace */) {
exportKind |= 16777216 /* ExportNamespace */;
}
if (node.flags & 1 /* Export */ || (node.kind !== 190 /* ImportDeclaration */ && isAmbientContext(container))) {
if (exportKind) {
var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes);
local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
node.localSymbol = local;
}
else {
declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
}
}
else {
declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
}
}
function bindChildren(node, symbolKind, isBlockScopeContainer) {
if (symbolKind & 1041936 /* HasLocals */) {
node.locals = {};
}
var saveParent = parent;
var saveContainer = container;
var savedBlockScopeContainer = blockScopeContainer;
parent = node;
if (symbolKind & 1048560 /* IsContainer */) {
container = node;
if (lastContainer !== container && !container.nextContainer) {
if (lastContainer) {
lastContainer.nextContainer = container;
}
lastContainer = container;
}
}
if (isBlockScopeContainer) {
blockScopeContainer = node;
}
ts.forEachChild(node, bind);
container = saveContainer;
parent = saveParent;
blockScopeContainer = savedBlockScopeContainer;
}
function bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
switch (container.kind) {
case 188 /* ModuleDeclaration */:
declareModuleMember(node, symbolKind, symbolExcludes);
break;
case 193 /* SourceFile */:
if (ts.isExternalModule(container)) {
declareModuleMember(node, symbolKind, symbolExcludes);
break;
}
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
case 131 /* IndexSignature */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
break;
case 184 /* ClassDeclaration */:
if (node.flags & 128 /* Static */) {
declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
break;
}
case 134 /* TypeLiteral */:
case 140 /* ObjectLiteral */:
case 185 /* InterfaceDeclaration */:
declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes);
break;
case 187 /* EnumDeclaration */:
declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
break;
}
bindChildren(node, symbolKind, isBlockScopeContainer);
}
function bindConstructorDeclaration(node) {
bindDeclaration(node, 16384 /* Constructor */, 0, true);
ts.forEach(node.parameters, function (p) {
if (p.flags & (16 /* Public */ | 32 /* Private */ | 64 /* Protected */)) {
bindDeclaration(p, 4 /* Property */, 107455 /* PropertyExcludes */, false);
}
});
}
function bindModuleDeclaration(node) {
if (node.name.kind === 7 /* StringLiteral */) {
bindDeclaration(node, 512 /* ValueModule */, 106639 /* ValueModuleExcludes */, true);
}
else {
var state = getModuleInstanceState(node);
if (state === 0 /* NonInstantiated */) {
bindDeclaration(node, 1024 /* NamespaceModule */, 0 /* NamespaceModuleExcludes */, true);
}
else {
bindDeclaration(node, 512 /* ValueModule */, 106639 /* ValueModuleExcludes */, true);
if (state === 2 /* ConstEnumOnly */) {
node.symbol.constEnumOnlyModule = true;
}
else if (node.symbol.constEnumOnlyModule) {
node.symbol.constEnumOnlyModule = false;
}
}
}
}
function bindAnonymousDeclaration(node, symbolKind, name, isBlockScopeContainer) {
var symbol = createSymbol(symbolKind, name);
addDeclarationToSymbol(symbol, node, symbolKind);
bindChildren(node, symbolKind, isBlockScopeContainer);
}
function bindCatchVariableDeclaration(node) {
var symbol = createSymbol(1 /* FunctionScopedVariable */, node.variable.text || "__missing");
addDeclarationToSymbol(symbol, node, 1 /* FunctionScopedVariable */);
var saveParent = parent;
var savedBlockScopeContainer = blockScopeContainer;
parent = blockScopeContainer = node;
ts.forEachChild(node, bind);
parent = saveParent;
blockScopeContainer = savedBlockScopeContainer;
}
function bindBlockScopedVariableDeclaration(node) {
switch (blockScopeContainer.kind) {
case 188 /* ModuleDeclaration */:
declareModuleMember(node, 2 /* BlockScopedVariable */, 107455 /* BlockScopedVariableExcludes */);
break;
case 193 /* SourceFile */:
if (ts.isExternalModule(container)) {
declareModuleMember(node, 2 /* BlockScopedVariable */, 107455 /* BlockScopedVariableExcludes */);
break;
}
default:
if (!blockScopeContainer.locals) {
blockScopeContainer.locals = {};
}
declareSymbol(blockScopeContainer.locals, undefined, node, 2 /* BlockScopedVariable */, 107455 /* BlockScopedVariableExcludes */);
}
bindChildren(node, 2 /* BlockScopedVariable */, false);
}
function bind(node) {
node.parent = parent;
switch (node.kind) {
case 122 /* TypeParameter */:
bindDeclaration(node, 1048576 /* TypeParameter */, 2103776 /* TypeParameterExcludes */, false);
break;
case 123 /* Parameter */:
bindDeclaration(node, 1 /* FunctionScopedVariable */, 107455 /* ParameterExcludes */, false);
break;
case 181 /* VariableDeclaration */:
if (node.flags & 6144 /* BlockScoped */) {
bindBlockScopedVariableDeclaration(node);
}
else {
bindDeclaration(node, 1 /* FunctionScopedVariable */, 107454 /* FunctionScopedVariableExcludes */, false);
}
break;
case 124 /* Property */:
case 141 /* PropertyAssignment */:
bindDeclaration(node, 4 /* Property */, 107455 /* PropertyExcludes */, false);
break;
case 192 /* EnumMember */:
bindDeclaration(node, 8 /* EnumMember */, 107455 /* EnumMemberExcludes */, false);
break;
case 129 /* CallSignature */:
bindDeclaration(node, 131072 /* CallSignature */, 0, false);
break;
case 125 /* Method */:
bindDeclaration(node, 8192 /* Method */, 99263 /* MethodExcludes */, true);
break;
case 130 /* ConstructSignature */:
bindDeclaration(node, 262144 /* ConstructSignature */, 0, true);
break;
case 131 /* IndexSignature */:
bindDeclaration(node, 524288 /* IndexSignature */, 0, false);
break;
case 182 /* FunctionDeclaration */:
bindDeclaration(node, 16 /* Function */, 106927 /* FunctionExcludes */, true);
break;
case 126 /* Constructor */:
bindConstructorDeclaration(node);
break;
case 127 /* GetAccessor */:
bindDeclaration(node, 32768 /* GetAccessor */, 41919 /* GetAccessorExcludes */, true);
break;
case 128 /* SetAccessor */:
bindDeclaration(node, 65536 /* SetAccessor */, 74687 /* SetAccessorExcludes */, true);
break;
case 134 /* TypeLiteral */:
bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type", false);
break;
case 140 /* ObjectLiteral */:
bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__object", false);
break;
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
bindAnonymousDeclaration(node, 16 /* Function */, "__function", true);
break;
case 178 /* CatchBlock */:
bindCatchVariableDeclaration(node);
break;
case 184 /* ClassDeclaration */:
bindDeclaration(node, 32 /* Class */, 3258879 /* ClassExcludes */, false);
break;
case 185 /* InterfaceDeclaration */:
bindDeclaration(node, 64 /* Interface */, 3152288 /* InterfaceExcludes */, false);
break;
case 186 /* TypeAliasDeclaration */:
bindDeclaration(node, 2097152 /* TypeAlias */, 3152352 /* TypeAliasExcludes */, false);
break;
case 187 /* EnumDeclaration */:
if (ts.isConstEnumDeclaration(node)) {
bindDeclaration(node, 128 /* ConstEnum */, 3259263 /* ConstEnumExcludes */, false);
}
else {
bindDeclaration(node, 256 /* RegularEnum */, 3258623 /* RegularEnumExcludes */, false);
}
break;
case 188 /* ModuleDeclaration */:
bindModuleDeclaration(node);
break;
case 190 /* ImportDeclaration */:
bindDeclaration(node, 33554432 /* Import */, 33554432 /* ImportExcludes */, false);
break;
case 193 /* SourceFile */:
if (ts.isExternalModule(node)) {
bindAnonymousDeclaration(node, 512 /* ValueModule */, '"' + ts.removeFileExtension(node.filename) + '"', true);
break;
}
case 158 /* Block */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
case 165 /* ForStatement */:
case 166 /* ForInStatement */:
case 171 /* SwitchStatement */:
bindChildren(node, 0, true);
break;
default:
var saveParent = parent;
parent = node;
ts.forEachChild(node, bind);
parent = saveParent;
}
}
}
ts.bindSourceFile = bindSourceFile;
})(ts || (ts = {}));
var ts;
(function (ts) {
var indentStrings = ["", " "];
function getIndentString(level) {
if (indentStrings[level] === undefined) {
indentStrings[level] = getIndentString(level - 1) + indentStrings[1];
}
return indentStrings[level];
}
ts.getIndentString = getIndentString;
function getIndentSize() {
return indentStrings[1].length;
}
function shouldEmitToOwnFile(sourceFile, compilerOptions) {
if (!ts.isDeclarationFile(sourceFile)) {
if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) {
return true;
}
return false;
}
return false;
}
ts.shouldEmitToOwnFile = shouldEmitToOwnFile;
function isExternalModuleOrDeclarationFile(sourceFile) {
return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile);
}
ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile;
function emitFiles(resolver, targetSourceFile) {
var program = resolver.getProgram();
var compilerHost = program.getCompilerHost();
var compilerOptions = program.getCompilerOptions();
var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined;
var diagnostics = [];
var newLine = program.getCompilerHost().getNewLine();
function getSourceFilePathInNewDir(newDirPath, sourceFile) {
var sourceFilePath = ts.getNormalizedPathFromPathComponents(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory()));
sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), "");
return ts.combinePaths(newDirPath, sourceFilePath);
}
function getOwnEmitOutputFilePath(sourceFile, extension) {
if (compilerOptions.outDir) {
var emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(compilerOptions.outDir, sourceFile));
}
else {
var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.filename);
}
return emitOutputFilePathWithoutExtension + extension;
}
function getFirstConstructorWithBody(node) {
return ts.forEach(node.members, function (member) {
if (member.kind === 126 /* Constructor */ && member.body) {
return member;
}
});
}
function getAllAccessorDeclarations(node, accessor) {
var firstAccessor;
var getAccessor;
var setAccessor;
ts.forEach(node.members, function (member) {
if ((member.kind === 127 /* GetAccessor */ || member.kind === 128 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 128 /* Static */) === (accessor.flags & 128 /* Static */)) {
if (!firstAccessor) {
firstAccessor = member;
}
if (member.kind === 127 /* GetAccessor */ && !getAccessor) {
getAccessor = member;
}
if (member.kind === 128 /* SetAccessor */ && !setAccessor) {
setAccessor = member;
}
}
});
return {
firstAccessor: firstAccessor,
getAccessor: getAccessor,
setAccessor: setAccessor
};
}
function createTextWriter() {
var output = "";
var indent = 0;
var lineStart = true;
var lineCount = 0;
var linePos = 0;
function write(s) {
if (s && s.length) {
if (lineStart) {
output += getIndentString(indent);
lineStart = false;
}
output += s;
}
}
function rawWrite(s) {
if (s !== undefined) {
if (lineStart) {
lineStart = false;
}
output += s;
}
}
function writeLiteral(s) {
if (s && s.length) {
write(s);
var lineStartsOfS = ts.getLineStarts(s);
if (lineStartsOfS.length > 1) {
lineCount = lineCount + lineStartsOfS.length - 1;
linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1];
}
}
}
function writeLine() {
if (!lineStart) {
output += newLine;
lineCount++;
linePos = output.length;
lineStart = true;
}
}
return {
write: write,
rawWrite: rawWrite,
writeLiteral: writeLiteral,
writeLine: writeLine,
increaseIndent: function () { return indent++; },
decreaseIndent: function () { return indent--; },
getIndent: function () { return indent; },
getTextPos: function () { return output.length; },
getLine: function () { return lineCount + 1; },
getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; },
getText: function () { return output; }
};
}
var currentSourceFile;
function getSourceTextOfLocalNode(node) {
var text = currentSourceFile.text;
return text.substring(ts.skipTrivia(text, node.pos), node.end);
}
function getLineOfLocalPosition(pos) {
return currentSourceFile.getLineAndCharacterFromPosition(pos).line;
}
function writeFile(filename, data, writeByteOrderMark) {
compilerHost.writeFile(filename, data, writeByteOrderMark, function (hostErrorMessage) {
diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage));
});
}
function emitComments(comments, trailingSeparator, writer, writeComment) {
var emitLeadingSpace = !trailingSeparator;
ts.forEach(comments, function (comment) {
if (emitLeadingSpace) {
writer.write(" ");
emitLeadingSpace = false;
}
writeComment(comment, writer);
if (comment.hasTrailingNewLine) {
writer.writeLine();
}
else if (trailingSeparator) {
writer.write(" ");
}
else {
emitLeadingSpace = true;
}
});
}
function emitNewLineBeforeLeadingComments(node, leadingComments, writer) {
if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && getLineOfLocalPosition(node.pos) !== getLineOfLocalPosition(leadingComments[0].pos)) {
writer.writeLine();
}
}
function writeCommentRange(comment, writer) {
if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) {
var firstCommentLineAndCharacter = currentSourceFile.getLineAndCharacterFromPosition(comment.pos);
var firstCommentLineIndent;
for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) {
var nextLineStart = currentSourceFile.getPositionFromLineAndCharacter(currentLine + 1, 1);
if (pos !== comment.pos) {
if (firstCommentLineIndent === undefined) {
firstCommentLineIndent = calculateIndent(currentSourceFile.getPositionFromLineAndCharacter(firstCommentLineAndCharacter.line, 1), comment.pos);
}
var currentWriterIndentSpacing = writer.getIndent() * getIndentSize();
var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart);
if (spacesToEmit > 0) {
var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize();
var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize());
writer.rawWrite(indentSizeSpaceString);
while (numberOfSingleSpacesToEmit) {
writer.rawWrite(" ");
numberOfSingleSpacesToEmit--;
}
}
else {
writer.rawWrite("");
}
}
writeTrimmedCurrentLine(pos, nextLineStart);
pos = nextLineStart;
}
}
else {
writer.write(currentSourceFile.text.substring(comment.pos, comment.end));
}
function writeTrimmedCurrentLine(pos, nextLineStart) {
var end = Math.min(comment.end, nextLineStart - 1);
var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, '');
if (currentLineText) {
writer.write(currentLineText);
if (end !== comment.end) {
writer.writeLine();
}
}
else {
writer.writeLiteral(newLine);
}
}
function calculateIndent(pos, end) {
var currentLineIndent = 0;
for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) {
if (currentSourceFile.text.charCodeAt(pos) === 9 /* tab */) {
currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize());
}
else {
currentLineIndent++;
}
}
return currentLineIndent;
}
}
function emitJavaScript(jsFilePath, root) {
var writer = createTextWriter();
var write = writer.write;
var writeLine = writer.writeLine;
var increaseIndent = writer.increaseIndent;
var decreaseIndent = writer.decreaseIndent;
var extendsEmitted = false;
var writeEmittedFiles = writeJavaScriptFile;
var emitLeadingComments = compilerOptions.removeComments ? function (node) {
} : emitLeadingDeclarationComments;
var emitTrailingComments = compilerOptions.removeComments ? function (node) {
} : emitTrailingDeclarationComments;
var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos) {
} : emitLeadingCommentsOfLocalPosition;
var detachedCommentsInfo;
var emitDetachedComments = compilerOptions.removeComments ? function (node) {
} : emitDetachedCommentsAtPosition;
var emitPinnedOrTripleSlashComments = compilerOptions.removeComments ? function (node) {
} : emitPinnedOrTripleSlashCommentsOfNode;
var writeComment = writeCommentRange;
var emit = emitNode;
var emitStart = function (node) {
};
var emitEnd = function (node) {
};
var emitToken = emitTokenText;
var scopeEmitStart = function (scopeDeclaration, scopeName) {
};
var scopeEmitEnd = function () {
};
var sourceMapData;
function initializeEmitterWithSourceMaps() {
var sourceMapDir;
var sourceMapSourceIndex = -1;
var sourceMapNameIndexMap = {};
var sourceMapNameIndices = [];
function getSourceMapNameIndex() {
return sourceMapNameIndices.length ? sourceMapNameIndices[sourceMapNameIndices.length - 1] : -1;
}
var lastRecordedSourceMapSpan;
var lastEncodedSourceMapSpan = {
emittedLine: 1,
emittedColumn: 1,
sourceLine: 1,
sourceColumn: 1,
sourceIndex: 0
};
var lastEncodedNameIndex = 0;
function encodeLastRecordedSourceMapSpan() {
if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) {
return;
}
var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn;
if (lastEncodedSourceMapSpan.emittedLine == lastRecordedSourceMapSpan.emittedLine) {
if (sourceMapData.sourceMapMappings) {
sourceMapData.sourceMapMappings += ",";
}
}
else {
for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) {
sourceMapData.sourceMapMappings += ";";
}
prevEncodedEmittedColumn = 1;
}
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn);
if (lastRecordedSourceMapSpan.nameIndex >= 0) {
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex);
lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex;
}
lastEncodedSourceMapSpan = lastRecordedSourceMapSpan;
sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan);
function base64VLQFormatEncode(inValue) {
function base64FormatEncode(inValue) {
if (inValue < 64) {
return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.charAt(inValue);
}
throw TypeError(inValue + ": not a 64 based value");
}
if (inValue < 0) {
inValue = ((-inValue) << 1) + 1;
}
else {
inValue = inValue << 1;
}
var encodedStr = "";
do {
var currentDigit = inValue & 31;
inValue = inValue >> 5;
if (inValue > 0) {
currentDigit = currentDigit | 32;
}
encodedStr = encodedStr + base64FormatEncode(currentDigit);
} while (inValue > 0);
return encodedStr;
}
}
function recordSourceMapSpan(pos) {
var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos);
var emittedLine = writer.getLine();
var emittedColumn = writer.getColumn();
if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || (lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex && (lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) {
encodeLastRecordedSourceMapSpan();
lastRecordedSourceMapSpan = {
emittedLine: emittedLine,
emittedColumn: emittedColumn,
sourceLine: sourceLinePos.line,
sourceColumn: sourceLinePos.character,
nameIndex: getSourceMapNameIndex(),
sourceIndex: sourceMapSourceIndex
};
}
else {
lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line;
lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character;
lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex;
}
}
function recordEmitNodeStartSpan(node) {
recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos));
}
function recordEmitNodeEndSpan(node) {
recordSourceMapSpan(node.end);
}
function writeTextWithSpanRecord(tokenKind, startPos, emitFn) {
var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos);
recordSourceMapSpan(tokenStartPos);
var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn);
recordSourceMapSpan(tokenEndPos);
return tokenEndPos;
}
function recordNewSourceFileStart(node) {
var sourcesDirectoryPath = compilerOptions.sourceRoot ? program.getCommonSourceDirectory() : sourceMapDir;
sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, true));
sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1;
sourceMapData.inputSourceFileNames.push(node.filename);
}
function recordScopeNameOfNode(node, scopeName) {
function recordScopeNameIndex(scopeNameIndex) {
sourceMapNameIndices.push(scopeNameIndex);
}
function recordScopeNameStart(scopeName) {
var scopeNameIndex = -1;
if (scopeName) {
var parentIndex = getSourceMapNameIndex();
if (parentIndex !== -1) {
scopeName = sourceMapData.sourceMapNames[parentIndex] + "." + scopeName;
}
scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName);
if (scopeNameIndex === undefined) {
scopeNameIndex = sourceMapData.sourceMapNames.length;
sourceMapData.sourceMapNames.push(scopeName);
sourceMapNameIndexMap[scopeName] = scopeNameIndex;
}
}
recordScopeNameIndex(scopeNameIndex);
}
if (scopeName) {
recordScopeNameStart(scopeName);
}
else if (node.kind === 182 /* FunctionDeclaration */ || node.kind === 149 /* FunctionExpression */ || node.kind === 125 /* Method */ || node.kind === 127 /* GetAccessor */ || node.kind === 128 /* SetAccessor */ || node.kind === 188 /* ModuleDeclaration */ || node.kind === 184 /* ClassDeclaration */ || node.kind === 187 /* EnumDeclaration */) {
if (node.name) {
scopeName = node.name.text;
}
recordScopeNameStart(scopeName);
}
else {
recordScopeNameIndex(getSourceMapNameIndex());
}
}
function recordScopeNameEnd() {
sourceMapNameIndices.pop();
}
;
function writeCommentRangeWithMap(comment, writer) {
recordSourceMapSpan(comment.pos);
writeCommentRange(comment, writer);
recordSourceMapSpan(comment.end);
}
function serializeSourceMapContents(version, file, sourceRoot, sources, names, mappings) {
if (typeof JSON !== "undefined") {
return JSON.stringify({
version: version,
file: file,
sourceRoot: sourceRoot,
sources: sources,
names: names,
mappings: mappings
});
}
return "{\"version\":" + version + ",\"file\":\"" + ts.escapeString(file) + "\",\"sourceRoot\":\"" + ts.escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + ts.escapeString(mappings) + "\"}";
function serializeStringArray(list) {
var output = "";
for (var i = 0, n = list.length; i < n; i++) {
if (i) {
output += ",";
}
output += "\"" + ts.escapeString(list[i]) + "\"";
}
return output;
}
}
function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) {
encodeLastRecordedSourceMapSpan();
writeFile(sourceMapData.sourceMapFilePath, serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings), false);
sourceMapDataList.push(sourceMapData);
writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark);
}
var sourceMapJsFile = ts.getBaseFilename(ts.normalizeSlashes(jsFilePath));
sourceMapData = {
sourceMapFilePath: jsFilePath + ".map",
jsSourceMappingURL: sourceMapJsFile + ".map",
sourceMapFile: sourceMapJsFile,
sourceMapSourceRoot: compilerOptions.sourceRoot || "",
sourceMapSources: [],
inputSourceFileNames: [],
sourceMapNames: [],
sourceMapMappings: "",
sourceMapDecodedMappings: []
};
sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot);
if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47 /* slash */) {
sourceMapData.sourceMapSourceRoot += ts.directorySeparator;
}
if (compilerOptions.mapRoot) {
sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot);
if (root) {
sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root));
}
if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) {
sourceMapDir = ts.combinePaths(program.getCommonSourceDirectory(), sourceMapDir);
sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, true);
}
else {
sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL);
}
}
else {
sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath));
}
function emitNodeWithMap(node) {
if (node) {
if (node.kind != 193 /* SourceFile */) {
recordEmitNodeStartSpan(node);
emitNode(node);
recordEmitNodeEndSpan(node);
}
else {
recordNewSourceFileStart(node);
emitNode(node);
}
}
}
writeEmittedFiles = writeJavaScriptAndSourceMapFile;
emit = emitNodeWithMap;
emitStart = recordEmitNodeStartSpan;
emitEnd = recordEmitNodeEndSpan;
emitToken = writeTextWithSpanRecord;
scopeEmitStart = recordScopeNameOfNode;
scopeEmitEnd = recordScopeNameEnd;
writeComment = writeCommentRangeWithMap;
}
function writeJavaScriptFile(emitOutput, writeByteOrderMark) {
writeFile(jsFilePath, emitOutput, writeByteOrderMark);
}
function emitTokenText(tokenKind, startPos, emitFn) {
var tokenString = ts.tokenToString(tokenKind);
if (emitFn) {
emitFn();
}
else {
write(tokenString);
}
return startPos + tokenString.length;
}
function emitOptional(prefix, node) {
if (node) {
write(prefix);
emit(node);
}
}
function emitTrailingCommaIfPresent(nodeList, isMultiline) {
if (nodeList.hasTrailingComma) {
write(",");
if (isMultiline) {
writeLine();
}
}
}
function emitCommaList(nodes, includeTrailingComma, count) {
if (!(count >= 0)) {
count = nodes.length;
}
if (nodes) {
for (var i = 0; i < count; i++) {
if (i) {
write(", ");
}
emit(nodes[i]);
}
if (includeTrailingComma) {
emitTrailingCommaIfPresent(nodes, false);
}
}
}
function emitMultiLineList(nodes, includeTrailingComma) {
if (nodes) {
for (var i = 0; i < nodes.length; i++) {
if (i) {
write(",");
}
writeLine();
emit(nodes[i]);
}
if (includeTrailingComma) {
emitTrailingCommaIfPresent(nodes, true);
}
}
}
function emitLines(nodes) {
emitLinesStartingAt(nodes, 0);
}
function emitLinesStartingAt(nodes, startIndex) {
for (var i = startIndex; i < nodes.length; i++) {
writeLine();
emit(nodes[i]);
}
}
function emitLiteral(node) {
var text = getLiteralText();
if (compilerOptions.sourceMap && (node.kind === 7 /* StringLiteral */ || ts.isTemplateLiteralKind(node.kind))) {
writer.writeLiteral(text);
}
else {
write(text);
}
function getLiteralText() {
if (compilerOptions.target < 2 /* ES6 */ && ts.isTemplateLiteralKind(node.kind)) {
return getTemplateLiteralAsStringLiteral(node);
}
return getSourceTextOfLocalNode(node);
}
}
function getTemplateLiteralAsStringLiteral(node) {
return '"' + ts.escapeString(node.text) + '"';
}
function emitTemplateExpression(node) {
if (compilerOptions.target >= 2 /* ES6 */) {
ts.forEachChild(node, emit);
return;
}
ts.Debug.assert(node.parent.kind !== 146 /* TaggedTemplateExpression */);
var templateNeedsParens = ts.isExpression(node.parent) && node.parent.kind !== 148 /* ParenExpression */ && comparePrecedenceToBinaryPlus(node.parent) !== -1 /* LessThan */;
if (templateNeedsParens) {
write("(");
}
emitLiteral(node.head);
ts.forEach(node.templateSpans, function (templateSpan) {
var needsParens = templateSpan.expression.kind !== 148 /* ParenExpression */ && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1 /* GreaterThan */;
write(" + ");
if (needsParens) {
write("(");
}
emit(templateSpan.expression);
if (needsParens) {
write(")");
}
if (templateSpan.literal.text.length !== 0) {
write(" + ");
emitLiteral(templateSpan.literal);
}
});
if (templateNeedsParens) {
write(")");
}
function comparePrecedenceToBinaryPlus(expression) {
ts.Debug.assert(compilerOptions.target <= 1 /* ES5 */);
switch (expression.kind) {
case 153 /* BinaryExpression */:
switch (expression.operator) {
case 34 /* AsteriskToken */:
case 35 /* SlashToken */:
case 36 /* PercentToken */:
return 1 /* GreaterThan */;
case 32 /* PlusToken */:
return 0 /* EqualTo */;
default:
return -1 /* LessThan */;
}
case 154 /* ConditionalExpression */:
return -1 /* LessThan */;
default:
return 1 /* GreaterThan */;
}
}
}
function emitTemplateSpan(span) {
emit(span.expression);
emit(span.literal);
}
function emitExpressionForPropertyName(node) {
if (node.kind === 7 /* StringLiteral */) {
emitLiteral(node);
}
else {
write("\"");
if (node.kind === 6 /* NumericLiteral */) {
write(node.text);
}
else {
write(getSourceTextOfLocalNode(node));
}
write("\"");
}
}
function isNonExpressionIdentifier(node) {
var parent = node.parent;
switch (parent.kind) {
case 123 /* Parameter */:
case 181 /* VariableDeclaration */:
case 124 /* Property */:
case 141 /* PropertyAssignment */:
case 192 /* EnumMember */:
case 125 /* Method */:
case 182 /* FunctionDeclaration */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 149 /* FunctionExpression */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
case 188 /* ModuleDeclaration */:
case 190 /* ImportDeclaration */:
return parent.name === node;
case 168 /* BreakStatement */:
case 167 /* ContinueStatement */:
case 191 /* ExportAssignment */:
return false;
case 174 /* LabeledStatement */:
return node.parent.label === node;
case 178 /* CatchBlock */:
return node.parent.variable === node;
}
}
function emitIdentifier(node) {
if (!isNonExpressionIdentifier(node)) {
var prefix = resolver.getExpressionNamePrefix(node);
if (prefix) {
write(prefix);
write(".");
}
}
write(getSourceTextOfLocalNode(node));
}
function emitThis(node) {
if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) {
write("_this");
}
else {
write("this");
}
}
function emitSuper(node) {
var flags = resolver.getNodeCheckFlags(node);
if (flags & 16 /* SuperInstance */) {
write("_super.prototype");
}
else if (flags & 32 /* SuperStatic */) {
write("_super");
}
else {
write("super");
}
}
function emitArrayLiteral(node) {
if (node.flags & 256 /* MultiLine */) {
write("[");
increaseIndent();
emitMultiLineList(node.elements, true);
decreaseIndent();
writeLine();
write("]");
}
else {
write("[");
emitCommaList(node.elements, true);
write("]");
}
}
function emitObjectLiteral(node) {
if (!node.properties.length) {
write("{}");
}
else if (node.flags & 256 /* MultiLine */) {
write("{");
increaseIndent();
emitMultiLineList(node.properties, compilerOptions.target >= 1 /* ES5 */);
decreaseIndent();
writeLine();
write("}");
}
else {
write("{ ");
emitCommaList(node.properties, compilerOptions.target >= 1 /* ES5 */);
write(" }");
}
}
function emitPropertyAssignment(node) {
emitLeadingComments(node);
emit(node.name);
write(": ");
emit(node.initializer);
emitTrailingComments(node);
}
function tryEmitConstantValue(node) {
var constantValue = resolver.getConstantValue(node);
if (constantValue !== undefined) {
var propertyName = node.kind === 142 /* PropertyAccess */ ? ts.declarationNameToString(node.right) : ts.getTextOfNode(node.index);
write(constantValue.toString() + " /* " + propertyName + " */");
return true;
}
return false;
}
function emitPropertyAccess(node) {
if (tryEmitConstantValue(node)) {
return;
}
emit(node.left);
write(".");
emit(node.right);
}
function emitIndexedAccess(node) {
if (tryEmitConstantValue(node)) {
return;
}
emit(node.object);
write("[");
emit(node.index);
write("]");
}
function emitCallExpression(node) {
var superCall = false;
if (node.func.kind === 89 /* SuperKeyword */) {
write("_super");
superCall = true;
}
else {
emit(node.func);
superCall = node.func.kind === 142 /* PropertyAccess */ && node.func.left.kind === 89 /* SuperKeyword */;
}
if (superCall) {
write(".call(");
emitThis(node.func);
if (node.arguments.length) {
write(", ");
emitCommaList(node.arguments, false);
}
write(")");
}
else {
write("(");
emitCommaList(node.arguments, false);
write(")");
}
}
function emitNewExpression(node) {
write("new ");
emit(node.func);
if (node.arguments) {
write("(");
emitCommaList(node.arguments, false);
write(")");
}
}
function emitTaggedTemplateExpression(node) {
ts.Debug.assert(compilerOptions.target >= 2 /* ES6 */, "Trying to emit a tagged template in pre-ES6 mode.");
emit(node.tag);
write(" ");
emit(node.template);
}
function emitParenExpression(node) {
if (node.expression.kind === 147 /* TypeAssertion */) {
var operand = node.expression.operand;
while (operand.kind == 147 /* TypeAssertion */) {
operand = operand.operand;
}
if (operand.kind !== 151 /* PrefixOperator */ && operand.kind !== 152 /* PostfixOperator */ && operand.kind !== 145 /* NewExpression */ && !(operand.kind === 144 /* CallExpression */ && node.parent.kind === 145 /* NewExpression */) && !(operand.kind === 149 /* FunctionExpression */ && node.parent.kind === 144 /* CallExpression */)) {
emit(operand);
return;
}
}
write("(");
emit(node.expression);
write(")");
}
function emitUnaryExpression(node) {
if (node.kind === 151 /* PrefixOperator */) {
write(ts.tokenToString(node.operator));
}
if (node.operator >= 63 /* Identifier */) {
write(" ");
}
else if (node.kind === 151 /* PrefixOperator */ && node.operand.kind === 151 /* PrefixOperator */) {
var operand = node.operand;
if (node.operator === 32 /* PlusToken */ && (operand.operator === 32 /* PlusToken */ || operand.operator === 37 /* PlusPlusToken */)) {
write(" ");
}
else if (node.operator === 33 /* MinusToken */ && (operand.operator === 33 /* MinusToken */ || operand.operator === 38 /* MinusMinusToken */)) {
write(" ");
}
}
emit(node.operand);
if (node.kind === 152 /* PostfixOperator */) {
write(ts.tokenToString(node.operator));
}
}
function emitBinaryExpression(node) {
emit(node.left);
if (node.operator !== 22 /* CommaToken */)
write(" ");
write(ts.tokenToString(node.operator));
write(" ");
emit(node.right);
}
function emitConditionalExpression(node) {
emit(node.condition);
write(" ? ");
emit(node.whenTrue);
write(" : ");
emit(node.whenFalse);
}
function emitBlock(node) {
emitToken(13 /* OpenBraceToken */, node.pos);
increaseIndent();
scopeEmitStart(node.parent);
if (node.kind === 189 /* ModuleBlock */) {
ts.Debug.assert(node.parent.kind === 188 /* ModuleDeclaration */);
emitCaptureThisForNodeIfNecessary(node.parent);
}
emitLines(node.statements);
decreaseIndent();
writeLine();
emitToken(14 /* CloseBraceToken */, node.statements.end);
scopeEmitEnd();
}
function emitEmbeddedStatement(node) {
if (node.kind === 158 /* Block */) {
write(" ");
emit(node);
}
else {
increaseIndent();
writeLine();
emit(node);
decreaseIndent();
}
}
function emitExpressionStatement(node) {
var isArrowExpression = node.expression.kind === 150 /* ArrowFunction */;
emitLeadingComments(node);
if (isArrowExpression)
write("(");
emit(node.expression);
if (isArrowExpression)
write(")");
write(";");
emitTrailingComments(node);
}
function emitIfStatement(node) {
emitLeadingComments(node);
var endPos = emitToken(82 /* IfKeyword */, node.pos);
write(" ");
endPos = emitToken(15 /* OpenParenToken */, endPos);
emit(node.expression);
emitToken(16 /* CloseParenToken */, node.expression.end);
emitEmbeddedStatement(node.thenStatement);
if (node.elseStatement) {
writeLine();
emitToken(74 /* ElseKeyword */, node.thenStatement.end);
if (node.elseStatement.kind === 162 /* IfStatement */) {
write(" ");
emit(node.elseStatement);
}
else {
emitEmbeddedStatement(node.elseStatement);
}
}
emitTrailingComments(node);
}
function emitDoStatement(node) {
write("do");
emitEmbeddedStatement(node.statement);
if (node.statement.kind === 158 /* Block */) {
write(" ");
}
else {
writeLine();
}
write("while (");
emit(node.expression);
write(");");
}
function emitWhileStatement(node) {
write("while (");
emit(node.expression);
write(")");
emitEmbeddedStatement(node.statement);
}
function emitForStatement(node) {
var endPos = emitToken(80 /* ForKeyword */, node.pos);
write(" ");
endPos = emitToken(15 /* OpenParenToken */, endPos);
if (node.declarations) {
if (node.declarations[0] && node.declarations[0].flags & 2048 /* Let */) {
emitToken(102 /* LetKeyword */, endPos);
}
else if (node.declarations[0] && node.declarations[0].flags & 4096 /* Const */) {
emitToken(68 /* ConstKeyword */, endPos);
}
else {
emitToken(96 /* VarKeyword */, endPos);
}
write(" ");
emitCommaList(node.declarations, false);
}
if (node.initializer) {
emit(node.initializer);
}
write(";");
emitOptional(" ", node.condition);
write(";");
emitOptional(" ", node.iterator);
write(")");
emitEmbeddedStatement(node.statement);
}
function emitForInStatement(node) {
var endPos = emitToken(80 /* ForKeyword */, node.pos);
write(" ");
endPos = emitToken(15 /* OpenParenToken */, endPos);
if (node.declaration) {
if (node.declaration.flags & 2048 /* Let */) {
emitToken(102 /* LetKeyword */, endPos);
}
else {
emitToken(96 /* VarKeyword */, endPos);
}
write(" ");
emit(node.declaration);
}
else {
emit(node.variable);
}
write(" in ");
emit(node.expression);
emitToken(16 /* CloseParenToken */, node.expression.end);
emitEmbeddedStatement(node.statement);
}
function emitBreakOrContinueStatement(node) {
emitToken(node.kind === 168 /* BreakStatement */ ? 64 /* BreakKeyword */ : 69 /* ContinueKeyword */, node.pos);
emitOptional(" ", node.label);
write(";");
}
function emitReturnStatement(node) {
emitLeadingComments(node);
emitToken(88 /* ReturnKeyword */, node.pos);
emitOptional(" ", node.expression);
write(";");
emitTrailingComments(node);
}
function emitWithStatement(node) {
write("with (");
emit(node.expression);
write(")");
emitEmbeddedStatement(node.statement);
}
function emitSwitchStatement(node) {
var endPos = emitToken(90 /* SwitchKeyword */, node.pos);
write(" ");
emitToken(15 /* OpenParenToken */, endPos);
emit(node.expression);
endPos = emitToken(16 /* CloseParenToken */, node.expression.end);
write(" ");
emitToken(13 /* OpenBraceToken */, endPos);
increaseIndent();
emitLines(node.clauses);
decreaseIndent();
writeLine();
emitToken(14 /* CloseBraceToken */, node.clauses.end);
}
function isOnSameLine(node1, node2) {
return getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node1.pos)) === getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node2.pos));
}
function emitCaseOrDefaultClause(node) {
if (node.kind === 172 /* CaseClause */) {
write("case ");
emit(node.expression);
write(":");
}
else {
write("default:");
}
if (node.statements.length === 1 && isOnSameLine(node, node.statements[0])) {
write(" ");
emit(node.statements[0]);
}
else {
increaseIndent();
emitLines(node.statements);
decreaseIndent();
}
}
function emitThrowStatement(node) {
write("throw ");
emit(node.expression);
write(";");
}
function emitTryStatement(node) {
write("try ");
emit(node.tryBlock);
emit(node.catchBlock);
if (node.finallyBlock) {
writeLine();
write("finally ");
emit(node.finallyBlock);
}
}
function emitCatchBlock(node) {
writeLine();
var endPos = emitToken(66 /* CatchKeyword */, node.pos);
write(" ");
emitToken(15 /* OpenParenToken */, endPos);
emit(node.variable);
emitToken(16 /* CloseParenToken */, node.variable.end);
write(" ");
emitBlock(node);
}
function emitDebuggerStatement(node) {
emitToken(70 /* DebuggerKeyword */, node.pos);
write(";");
}
function emitLabelledStatement(node) {
emit(node.label);
write(": ");
emit(node.statement);
}
function getContainingModule(node) {
do {
node = node.parent;
} while (node && node.kind !== 188 /* ModuleDeclaration */);
return node;
}
function emitModuleMemberName(node) {
emitStart(node.name);
if (node.flags & 1 /* Export */) {
var container = getContainingModule(node);
write(container ? resolver.getLocalNameOfContainer(container) : "exports");
write(".");
}
emitNode(node.name);
emitEnd(node.name);
}
function emitVariableDeclaration(node) {
emitLeadingComments(node);
emitModuleMemberName(node);
emitOptional(" = ", node.initializer);
emitTrailingComments(node);
}
function emitVariableStatement(node) {
emitLeadingComments(node);
if (!(node.flags & 1 /* Export */)) {
if (node.flags & 2048 /* Let */) {
write("let ");
}
else if (node.flags & 4096 /* Const */) {
write("const ");
}
else {
write("var ");
}
}
emitCommaList(node.declarations, false);
write(";");
emitTrailingComments(node);
}
function emitParameter(node) {
emitLeadingComments(node);
emit(node.name);
emitTrailingComments(node);
}
function emitDefaultValueAssignments(node) {
ts.forEach(node.parameters, function (param) {
if (param.initializer) {
writeLine();
emitStart(param);
write("if (");
emitNode(param.name);
write(" === void 0)");
emitEnd(param);
write(" { ");
emitStart(param);
emitNode(param.name);
write(" = ");
emitNode(param.initializer);
emitEnd(param);
write("; }");
}
});
}
function emitRestParameter(node) {
if (ts.hasRestParameters(node)) {
var restIndex = node.parameters.length - 1;
var restParam = node.parameters[restIndex];
writeLine();
emitLeadingComments(restParam);
emitStart(restParam);
write("var ");
emitNode(restParam.name);
write(" = [];");
emitEnd(restParam);
emitTrailingComments(restParam);
writeLine();
write("for (");
emitStart(restParam);
write("var _i = " + restIndex + ";");
emitEnd(restParam);
write(" ");
emitStart(restParam);
write("_i < arguments.length;");
emitEnd(restParam);
write(" ");
emitStart(restParam);
write("_i++");
emitEnd(restParam);
write(") {");
increaseIndent();
writeLine();
emitStart(restParam);
emitNode(restParam.name);
write("[_i - " + restIndex + "] = arguments[_i];");
emitEnd(restParam);
decreaseIndent();
writeLine();
write("}");
}
}
function emitAccessor(node) {
emitLeadingComments(node);
write(node.kind === 127 /* GetAccessor */ ? "get " : "set ");
emit(node.name);
emitSignatureAndBody(node);
emitTrailingComments(node);
}
function emitFunctionDeclaration(node) {
if (!node.body) {
return emitPinnedOrTripleSlashComments(node);
}
if (node.kind !== 125 /* Method */) {
emitLeadingComments(node);
}
write("function ");
if (node.kind === 182 /* FunctionDeclaration */ || (node.kind === 149 /* FunctionExpression */ && node.name)) {
emit(node.name);
}
emitSignatureAndBody(node);
if (node.kind !== 125 /* Method */) {
emitTrailingComments(node);
}
}
function emitCaptureThisForNodeIfNecessary(node) {
if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) {
writeLine();
emitStart(node);
write("var _this = this;");
emitEnd(node);
}
}
function emitSignatureParameters(node) {
increaseIndent();
write("(");
if (node) {
emitCommaList(node.parameters, false, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0));
}
write(")");
decreaseIndent();
}
function emitSignatureAndBody(node) {
emitSignatureParameters(node);
write(" {");
scopeEmitStart(node);
increaseIndent();
emitDetachedComments(node.body.kind === 183 /* FunctionBlock */ ? node.body.statements : node.body);
var startIndex = 0;
if (node.body.kind === 183 /* FunctionBlock */) {
startIndex = emitDirectivePrologues(node.body.statements, true);
}
var outPos = writer.getTextPos();
emitCaptureThisForNodeIfNecessary(node);
emitDefaultValueAssignments(node);
emitRestParameter(node);
if (node.body.kind !== 183 /* FunctionBlock */ && outPos === writer.getTextPos()) {
decreaseIndent();
write(" ");
emitStart(node.body);
write("return ");
emitNode(node.body);
emitEnd(node.body);
write("; ");
emitStart(node.body);
write("}");
emitEnd(node.body);
}
else {
if (node.body.kind === 183 /* FunctionBlock */) {
emitLinesStartingAt(node.body.statements, startIndex);
}
else {
writeLine();
emitLeadingComments(node.body);
write("return ");
emit(node.body);
write(";");
emitTrailingComments(node.body);
}
writeLine();
if (node.body.kind === 183 /* FunctionBlock */) {
emitLeadingCommentsOfPosition(node.body.statements.end);
decreaseIndent();
emitToken(14 /* CloseBraceToken */, node.body.statements.end);
}
else {
decreaseIndent();
emitStart(node.body);
write("}");
emitEnd(node.body);
}
}
scopeEmitEnd();
if (node.flags & 1 /* Export */) {
writeLine();
emitStart(node);
emitModuleMemberName(node);
write(" = ");
emit(node.name);
emitEnd(node);
write(";");
}
}
function findInitialSuperCall(ctor) {
if (ctor.body) {
var statement = ctor.body.statements[0];
if (statement && statement.kind === 161 /* ExpressionStatement */) {
var expr = statement.expression;
if (expr && expr.kind === 144 /* CallExpression */) {
var func = expr.func;
if (func && func.kind === 89 /* SuperKeyword */) {
return statement;
}
}
}
}
}
function emitParameterPropertyAssignments(node) {
ts.forEach(node.parameters, function (param) {
if (param.flags & 112 /* AccessibilityModifier */) {
writeLine();
emitStart(param);
emitStart(param.name);
write("this.");
emitNode(param.name);
emitEnd(param.name);
write(" = ");
emit(param.name);
write(";");
emitEnd(param);
}
});
}
function emitMemberAccess(memberName) {
if (memberName.kind === 7 /* StringLiteral */ || memberName.kind === 6 /* NumericLiteral */) {
write("[");
emitNode(memberName);
write("]");
}
else {
write(".");
emitNode(memberName);
}
}
function emitMemberAssignments(node, staticFlag) {
ts.forEach(node.members, function (member) {
if (member.kind === 124 /* Property */ && (member.flags & 128 /* Static */) === staticFlag && member.initializer) {
writeLine();
emitLeadingComments(member);
emitStart(member);
emitStart(member.name);
if (staticFlag) {
emitNode(node.name);
}
else {
write("this");
}
emitMemberAccess(member.name);
emitEnd(member.name);
write(" = ");
emit(member.initializer);
write(";");
emitEnd(member);
emitTrailingComments(member);
}
});
}
function emitMemberFunctions(node) {
ts.forEach(node.members, function (member) {
if (member.kind === 125 /* Method */) {
if (!member.body) {
return emitPinnedOrTripleSlashComments(member);
}
writeLine();
emitLeadingComments(member);
emitStart(member);
emitStart(member.name);
emitNode(node.name);
if (!(member.flags & 128 /* Static */)) {
write(".prototype");
}
emitMemberAccess(member.name);
emitEnd(member.name);
write(" = ");
emitStart(member);
emitFunctionDeclaration(member);
emitEnd(member);
emitEnd(member);
write(";");
emitTrailingComments(member);
}
else if (member.kind === 127 /* GetAccessor */ || member.kind === 128 /* SetAccessor */) {
var accessors = getAllAccessorDeclarations(node, member);
if (member === accessors.firstAccessor) {
writeLine();
emitStart(member);
write("Object.defineProperty(");
emitStart(member.name);
emitNode(node.name);
if (!(member.flags & 128 /* Static */)) {
write(".prototype");
}
write(", ");
emitExpressionForPropertyName(member.name);
emitEnd(member.name);
write(", {");
increaseIndent();
if (accessors.getAccessor) {
writeLine();
emitLeadingComments(accessors.getAccessor);
write("get: ");
emitStart(accessors.getAccessor);
write("function ");
emitSignatureAndBody(accessors.getAccessor);
emitEnd(accessors.getAccessor);
emitTrailingComments(accessors.getAccessor);
write(",");
}
if (accessors.setAccessor) {
writeLine();
emitLeadingComments(accessors.setAccessor);
write("set: ");
emitStart(accessors.setAccessor);
write("function ");
emitSignatureAndBody(accessors.setAccessor);
emitEnd(accessors.setAccessor);
emitTrailingComments(accessors.setAccessor);
write(",");
}
writeLine();
write("enumerable: true,");
writeLine();
write("configurable: true");
decreaseIndent();
writeLine();
write("});");
emitEnd(member);
}
}
});
}
function emitClassDeclaration(node) {
emitLeadingComments(node);
write("var ");
emit(node.name);
write(" = (function (");
if (node.baseType) {
write("_super");
}
write(") {");
increaseIndent();
scopeEmitStart(node);
if (node.baseType) {
writeLine();
emitStart(node.baseType);
write("__extends(");
emit(node.name);
write(", _super);");
emitEnd(node.baseType);
}
writeLine();
emitConstructorOfClass();
emitMemberFunctions(node);
emitMemberAssignments(node, 128 /* Static */);
writeLine();
function emitClassReturnStatement() {
write("return ");
emitNode(node.name);
}
emitToken(14 /* CloseBraceToken */, node.members.end, emitClassReturnStatement);
write(";");
decreaseIndent();
writeLine();
emitToken(14 /* CloseBraceToken */, node.members.end);
scopeEmitEnd();
emitStart(node);
write(")(");
if (node.baseType) {
emit(node.baseType.typeName);
}
write(");");
emitEnd(node);
if (node.flags & 1 /* Export */) {
writeLine();
emitStart(node);
emitModuleMemberName(node);
write(" = ");
emit(node.name);
emitEnd(node);
write(";");
}
emitTrailingComments(node);
function emitConstructorOfClass() {
ts.forEach(node.members, function (member) {
if (member.kind === 126 /* Constructor */ && !member.body) {
emitPinnedOrTripleSlashComments(member);
}
});
var ctor = getFirstConstructorWithBody(node);
if (ctor) {
emitLeadingComments(ctor);
}
emitStart(ctor || node);
write("function ");
emit(node.name);
emitSignatureParameters(ctor);
write(" {");
scopeEmitStart(node, "constructor");
increaseIndent();
if (ctor) {
emitDetachedComments(ctor.body.statements);
}
emitCaptureThisForNodeIfNecessary(node);
if (ctor) {
emitDefaultValueAssignments(ctor);
emitRestParameter(ctor);
if (node.baseType) {
var superCall = findInitialSuperCall(ctor);
if (superCall) {
writeLine();
emit(superCall);
}
}
emitParameterPropertyAssignments(ctor);
}
else {
if (node.baseType) {
writeLine();
emitStart(node.baseType);
write("_super.apply(this, arguments);");
emitEnd(node.baseType);
}
}
emitMemberAssignments(node, 0);
if (ctor) {
var statements = ctor.body.statements;
if (superCall)
statements = statements.slice(1);
emitLines(statements);
}
writeLine();
if (ctor) {
emitLeadingCommentsOfPosition(ctor.body.statements.end);
}
decreaseIndent();
emitToken(14 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end);
scopeEmitEnd();
emitEnd(ctor || node);
if (ctor) {
emitTrailingComments(ctor);
}
}
}
function emitInterfaceDeclaration(node) {
emitPinnedOrTripleSlashComments(node);
}
function emitEnumDeclaration(node) {
var isConstEnum = ts.isConstEnumDeclaration(node);
if (isConstEnum && !compilerOptions.preserveConstEnums) {
return;
}
emitLeadingComments(node);
if (!(node.flags & 1 /* Export */)) {
emitStart(node);
write("var ");
emit(node.name);
emitEnd(node);
write(";");
}
writeLine();
emitStart(node);
write("(function (");
emitStart(node.name);
write(resolver.getLocalNameOfContainer(node));
emitEnd(node.name);
write(") {");
increaseIndent();
scopeEmitStart(node);
emitEnumMemberDeclarations(isConstEnum);
decreaseIndent();
writeLine();
emitToken(14 /* CloseBraceToken */, node.members.end);
scopeEmitEnd();
write(")(");
emitModuleMemberName(node);
write(" || (");
emitModuleMemberName(node);
write(" = {}));");
emitEnd(node);
if (node.flags & 1 /* Export */) {
writeLine();
emitStart(node);
write("var ");
emit(node.name);
write(" = ");
emitModuleMemberName(node);
emitEnd(node);
write(";");
}
emitTrailingComments(node);
function emitEnumMemberDeclarations(isConstEnum) {
ts.forEach(node.members, function (member) {
writeLine();
emitLeadingComments(member);
emitStart(member);
write(resolver.getLocalNameOfContainer(node));
write("[");
write(resolver.getLocalNameOfContainer(node));
write("[");
emitExpressionForPropertyName(member.name);
write("] = ");
if (member.initializer && !isConstEnum) {
emit(member.initializer);
}
else {
write(resolver.getEnumMemberValue(member).toString());
}
write("] = ");
emitExpressionForPropertyName(member.name);
emitEnd(member);
write(";");
emitTrailingComments(member);
});
}
}
function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
if (moduleDeclaration.body.kind === 188 /* ModuleDeclaration */) {
var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
return recursiveInnerModule || moduleDeclaration.body;
}
}
function emitModuleDeclaration(node) {
if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
return emitPinnedOrTripleSlashComments(node);
}
emitLeadingComments(node);
emitStart(node);
write("var ");
emit(node.name);
write(";");
emitEnd(node);
writeLine();
emitStart(node);
write("(function (");
emitStart(node.name);
write(resolver.getLocalNameOfContainer(node));
emitEnd(node.name);
write(") ");
if (node.body.kind === 189 /* ModuleBlock */) {
emit(node.body);
}
else {
write("{");
increaseIndent();
scopeEmitStart(node);
emitCaptureThisForNodeIfNecessary(node);
writeLine();
emit(node.body);
decreaseIndent();
writeLine();
var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body;
emitToken(14 /* CloseBraceToken */, moduleBlock.statements.end);
scopeEmitEnd();
}
write(")(");
if (node.flags & 1 /* Export */) {
emit(node.name);
write(" = ");
}
emitModuleMemberName(node);
write(" || (");
emitModuleMemberName(node);
write(" = {}));");
emitEnd(node);
emitTrailingComments(node);
}
function emitImportDeclaration(node) {
var emitImportDeclaration = resolver.isReferencedImportDeclaration(node);
if (!emitImportDeclaration) {
emitImportDeclaration = !ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportWithEntityName(node);
}
if (emitImportDeclaration) {
if (node.externalModuleName && node.parent.kind === 193 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) {
if (node.flags & 1 /* Export */) {
writeLine();
emitLeadingComments(node);
emitStart(node);
emitModuleMemberName(node);
write(" = ");
emit(node.name);
write(";");
emitEnd(node);
emitTrailingComments(node);
}
}
else {
writeLine();
emitLeadingComments(node);
emitStart(node);
if (!(node.flags & 1 /* Export */))
write("var ");
emitModuleMemberName(node);
write(" = ");
if (node.entityName) {
emit(node.entityName);
}
else {
write("require(");
emitStart(node.externalModuleName);
emitLiteral(node.externalModuleName);
emitEnd(node.externalModuleName);
emitToken(16 /* CloseParenToken */, node.externalModuleName.end);
}
write(";");
emitEnd(node);
emitTrailingComments(node);
}
}
}
function getExternalImportDeclarations(node) {
var result = [];
ts.forEach(node.statements, function (stat) {
if (stat.kind === 190 /* ImportDeclaration */ && stat.externalModuleName && resolver.isReferencedImportDeclaration(stat)) {
result.push(stat);
}
});
return result;
}
function getFirstExportAssignment(sourceFile) {
return ts.forEach(sourceFile.statements, function (node) {
if (node.kind === 191 /* ExportAssignment */) {
return node;
}
});
}
function emitAMDModule(node, startIndex) {
var imports = getExternalImportDeclarations(node);
writeLine();
write("define([\"require\", \"exports\"");
ts.forEach(imports, function (imp) {
write(", ");
emitLiteral(imp.externalModuleName);
});
ts.forEach(node.amdDependencies, function (amdDependency) {
var text = "\"" + amdDependency + "\"";
write(", ");
write(text);
});
write("], function (require, exports");
ts.forEach(imports, function (imp) {
write(", ");
emit(imp.name);
});
write(") {");
increaseIndent();
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
var exportName = resolver.getExportAssignmentName(node);
if (exportName) {
writeLine();
var exportAssignement = getFirstExportAssignment(node);
emitStart(exportAssignement);
write("return ");
emitStart(exportAssignement.exportName);
write(exportName);
emitEnd(exportAssignement.exportName);
write(";");
emitEnd(exportAssignement);
}
decreaseIndent();
writeLine();
write("});");
}
function emitCommonJSModule(node, startIndex) {
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
var exportName = resolver.getExportAssignmentName(node);
if (exportName) {
writeLine();
var exportAssignement = getFirstExportAssignment(node);
emitStart(exportAssignement);
write("module.exports = ");
emitStart(exportAssignement.exportName);
write(exportName);
emitEnd(exportAssignement.exportName);
write(";");
emitEnd(exportAssignement);
}
}
function emitDirectivePrologues(statements, startWithNewLine) {
for (var i = 0; i < statements.length; ++i) {
if (ts.isPrologueDirective(statements[i])) {
if (startWithNewLine || i > 0) {
writeLine();
}
emit(statements[i]);
}
else {
return i;
}
}
return statements.length;
}
function emitSourceFile(node) {
currentSourceFile = node;
writeLine();
emitDetachedComments(node);
var startIndex = emitDirectivePrologues(node.statements, false);
if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) {
writeLine();
write("var __extends = this.__extends || function (d, b) {");
increaseIndent();
writeLine();
write("for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];");
writeLine();
write("function __() { this.constructor = d; }");
writeLine();
write("__.prototype = b.prototype;");
writeLine();
write("d.prototype = new __();");
decreaseIndent();
writeLine();
write("};");
extendsEmitted = true;
}
if (ts.isExternalModule(node)) {
if (compilerOptions.module === 2 /* AMD */) {
emitAMDModule(node, startIndex);
}
else {
emitCommonJSModule(node, startIndex);
}
}
else {
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
}
}
function emitNode(node) {
if (!node) {
return;
}
if (node.flags & 2 /* Ambient */) {
return emitPinnedOrTripleSlashComments(node);
}
switch (node.kind) {
case 63 /* Identifier */:
return emitIdentifier(node);
case 123 /* Parameter */:
return emitParameter(node);
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
return emitAccessor(node);
case 91 /* ThisKeyword */:
return emitThis(node);
case 89 /* SuperKeyword */:
return emitSuper(node);
case 87 /* NullKeyword */:
return write("null");
case 93 /* TrueKeyword */:
return write("true");
case 78 /* FalseKeyword */:
return write("false");
case 6 /* NumericLiteral */:
case 7 /* StringLiteral */:
case 8 /* RegularExpressionLiteral */:
case 9 /* NoSubstitutionTemplateLiteral */:
case 10 /* TemplateHead */:
case 11 /* TemplateMiddle */:
case 12 /* TemplateTail */:
return emitLiteral(node);
case 155 /* TemplateExpression */:
return emitTemplateExpression(node);
case 156 /* TemplateSpan */:
return emitTemplateSpan(node);
case 121 /* QualifiedName */:
return emitPropertyAccess(node);
case 139 /* ArrayLiteral */:
return emitArrayLiteral(node);
case 140 /* ObjectLiteral */:
return emitObjectLiteral(node);
case 141 /* PropertyAssignment */:
return emitPropertyAssignment(node);
case 142 /* PropertyAccess */:
return emitPropertyAccess(node);
case 143 /* IndexedAccess */:
return emitIndexedAccess(node);
case 144 /* CallExpression */:
return emitCallExpression(node);
case 145 /* NewExpression */:
return emitNewExpression(node);
case 146 /* TaggedTemplateExpression */:
return emitTaggedTemplateExpression(node);
case 147 /* TypeAssertion */:
return emit(node.operand);
case 148 /* ParenExpression */:
return emitParenExpression(node);
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
return emitFunctionDeclaration(node);
case 151 /* PrefixOperator */:
case 152 /* PostfixOperator */:
return emitUnaryExpression(node);
case 153 /* BinaryExpression */:
return emitBinaryExpression(node);
case 154 /* ConditionalExpression */:
return emitConditionalExpression(node);
case 157 /* OmittedExpression */:
return;
case 158 /* Block */:
case 177 /* TryBlock */:
case 179 /* FinallyBlock */:
case 183 /* FunctionBlock */:
case 189 /* ModuleBlock */:
return emitBlock(node);
case 159 /* VariableStatement */:
return emitVariableStatement(node);
case 160 /* EmptyStatement */:
return write(";");
case 161 /* ExpressionStatement */:
return emitExpressionStatement(node);
case 162 /* IfStatement */:
return emitIfStatement(node);
case 163 /* DoStatement */:
return emitDoStatement(node);
case 164 /* WhileStatement */:
return emitWhileStatement(node);
case 165 /* ForStatement */:
return emitForStatement(node);
case 166 /* ForInStatement */:
return emitForInStatement(node);
case 167 /* ContinueStatement */:
case 168 /* BreakStatement */:
return emitBreakOrContinueStatement(node);
case 169 /* ReturnStatement */:
return emitReturnStatement(node);
case 170 /* WithStatement */:
return emitWithStatement(node);
case 171 /* SwitchStatement */:
return emitSwitchStatement(node);
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
return emitCaseOrDefaultClause(node);
case 174 /* LabeledStatement */:
return emitLabelledStatement(node);
case 175 /* ThrowStatement */:
return emitThrowStatement(node);
case 176 /* TryStatement */:
return emitTryStatement(node);
case 178 /* CatchBlock */:
return emitCatchBlock(node);
case 180 /* DebuggerStatement */:
return emitDebuggerStatement(node);
case 181 /* VariableDeclaration */:
return emitVariableDeclaration(node);
case 184 /* ClassDeclaration */:
return emitClassDeclaration(node);
case 185 /* InterfaceDeclaration */:
return emitInterfaceDeclaration(node);
case 187 /* EnumDeclaration */:
return emitEnumDeclaration(node);
case 188 /* ModuleDeclaration */:
return emitModuleDeclaration(node);
case 190 /* ImportDeclaration */:
return emitImportDeclaration(node);
case 193 /* SourceFile */:
return emitSourceFile(node);
}
}
function hasDetachedComments(pos) {
return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos;
}
function getLeadingCommentsWithoutDetachedComments() {
var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos);
if (detachedCommentsInfo.length - 1) {
detachedCommentsInfo.pop();
}
else {
detachedCommentsInfo = undefined;
}
return leadingComments;
}
function getLeadingCommentsToEmit(node) {
if (node.parent.kind === 193 /* SourceFile */ || node.pos !== node.parent.pos) {
var leadingComments;
if (hasDetachedComments(node.pos)) {
leadingComments = getLeadingCommentsWithoutDetachedComments();
}
else {
leadingComments = ts.getLeadingCommentRangesOfNode(node, currentSourceFile);
}
return leadingComments;
}
}
function emitLeadingDeclarationComments(node) {
var leadingComments = getLeadingCommentsToEmit(node);
emitNewLineBeforeLeadingComments(node, leadingComments, writer);
emitComments(leadingComments, true, writer, writeComment);
}
function emitTrailingDeclarationComments(node) {
if (node.parent.kind === 193 /* SourceFile */ || node.end !== node.parent.end) {
var trailingComments = ts.getTrailingCommentRanges(currentSourceFile.text, node.end);
emitComments(trailingComments, false, writer, writeComment);
}
}
function emitLeadingCommentsOfLocalPosition(pos) {
var leadingComments;
if (hasDetachedComments(pos)) {
leadingComments = getLeadingCommentsWithoutDetachedComments();
}
else {
leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos);
}
emitNewLineBeforeLeadingComments({ pos: pos, end: pos }, leadingComments, writer);
emitComments(leadingComments, true, writer, writeComment);
}
function emitDetachedCommentsAtPosition(node) {
var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
if (leadingComments) {
var detachedComments = [];
var lastComment;
ts.forEach(leadingComments, function (comment) {
if (lastComment) {
var lastCommentLine = getLineOfLocalPosition(lastComment.end);
var commentLine = getLineOfLocalPosition(comment.pos);
if (commentLine >= lastCommentLine + 2) {
return detachedComments;
}
}
detachedComments.push(comment);
lastComment = comment;
});
if (detachedComments.length) {
var lastCommentLine = getLineOfLocalPosition(detachedComments[detachedComments.length - 1].end);
var astLine = getLineOfLocalPosition(ts.skipTrivia(currentSourceFile.text, node.pos));
if (astLine >= lastCommentLine + 2) {
emitNewLineBeforeLeadingComments(node, leadingComments, writer);
emitComments(detachedComments, true, writer, writeComment);
var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end };
if (detachedCommentsInfo) {
detachedCommentsInfo.push(currentDetachedCommentInfo);
}
else {
detachedCommentsInfo = [currentDetachedCommentInfo];
}
}
}
}
}
function emitPinnedOrTripleSlashCommentsOfNode(node) {
var pinnedComments = ts.filter(getLeadingCommentsToEmit(node), isPinnedOrTripleSlashComment);
function isPinnedOrTripleSlashComment(comment) {
if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42 /* asterisk */) {
return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33 /* exclamation */;
}
else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 /* slash */ && comment.pos + 2 < comment.end && currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 /* slash */ && currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) {
return true;
}
}
emitNewLineBeforeLeadingComments(node, pinnedComments, writer);
emitComments(pinnedComments, true, writer, writeComment);
}
if (compilerOptions.sourceMap) {
initializeEmitterWithSourceMaps();
}
if (root) {
emit(root);
}
else {
ts.forEach(program.getSourceFiles(), function (sourceFile) {
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
emit(sourceFile);
}
});
}
writeLine();
writeEmittedFiles(writer.getText(), compilerOptions.emitBOM);
}
function emitDeclarations(jsFilePath, root) {
var writer = createTextWriterWithSymbolWriter();
var write = writer.write;
var writeLine = writer.writeLine;
var increaseIndent = writer.increaseIndent;
var decreaseIndent = writer.decreaseIndent;
var enclosingDeclaration;
var reportedDeclarationError = false;
var emitJsDocComments = compilerOptions.removeComments ? function (declaration) {
} : writeJsDocComments;
var aliasDeclarationEmitInfo = [];
var getSymbolVisibilityDiagnosticMessage;
function createTextWriterWithSymbolWriter() {
var writer = createTextWriter();
writer.trackSymbol = trackSymbol;
writer.writeKeyword = writer.write;
writer.writeOperator = writer.write;
writer.writePunctuation = writer.write;
writer.writeSpace = writer.write;
writer.writeStringLiteral = writer.writeLiteral;
writer.writeParameter = writer.write;
writer.writeSymbol = writer.write;
return writer;
}
function writeAsychronousImportDeclarations(importDeclarations) {
var oldWriter = writer;
ts.forEach(importDeclarations, function (aliasToWrite) {
var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; });
writer = createTextWriterWithSymbolWriter();
for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) {
writer.increaseIndent();
}
writeImportDeclaration(aliasToWrite);
aliasEmitInfo.asynchronousOutput = writer.getText();
});
writer = oldWriter;
}
function trackSymbol(symbol, enclosingDeclaration, meaning) {
var symbolAccesibilityResult = resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning);
if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) {
if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) {
writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible);
}
}
else {
reportedDeclarationError = true;
var errorInfo = getSymbolVisibilityDiagnosticMessage(symbolAccesibilityResult);
if (errorInfo) {
if (errorInfo.typeName) {
diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, getSourceTextOfLocalNode(errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
}
else {
diagnostics.push(ts.createDiagnosticForNode(errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
}
}
}
}
function emitLines(nodes) {
for (var i = 0, n = nodes.length; i < n; i++) {
emitNode(nodes[i]);
}
}
function emitCommaList(nodes, eachNodeEmitFn) {
var currentWriterPos = writer.getTextPos();
for (var i = 0, n = nodes.length; i < n; i++) {
if (currentWriterPos !== writer.getTextPos()) {
write(", ");
}
currentWriterPos = writer.getTextPos();
eachNodeEmitFn(nodes[i]);
}
}
function writeJsDocComments(declaration) {
if (declaration) {
var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile);
emitNewLineBeforeLeadingComments(declaration, jsDocComments, writer);
emitComments(jsDocComments, true, writer, writeCommentRange);
}
}
function emitSourceTextOfNode(node) {
write(getSourceTextOfLocalNode(node));
}
function emitSourceFile(node) {
currentSourceFile = node;
enclosingDeclaration = node;
emitLines(node.statements);
}
function emitExportAssignment(node) {
write("export = ");
emitSourceTextOfNode(node.exportName);
write(";");
writeLine();
}
function emitDeclarationFlags(node) {
if (node.flags & 128 /* Static */) {
if (node.flags & 32 /* Private */) {
write("private ");
}
else if (node.flags & 64 /* Protected */) {
write("protected ");
}
write("static ");
}
else {
if (node.flags & 32 /* Private */) {
write("private ");
}
else if (node.flags & 64 /* Protected */) {
write("protected ");
}
else if (node.parent === currentSourceFile) {
if (node.flags & 1 /* Export */) {
write("export ");
}
if (node.kind !== 185 /* InterfaceDeclaration */) {
write("declare ");
}
}
}
}
function emitImportDeclaration(node) {
var nodeEmitInfo = {
declaration: node,
outputPos: writer.getTextPos(),
indent: writer.getIndent(),
hasWritten: resolver.isDeclarationVisible(node)
};
aliasDeclarationEmitInfo.push(nodeEmitInfo);
if (nodeEmitInfo.hasWritten) {
writeImportDeclaration(node);
}
}
function writeImportDeclaration(node) {
emitJsDocComments(node);
if (node.flags & 1 /* Export */) {
writer.write("export ");
}
writer.write("import ");
writer.write(getSourceTextOfLocalNode(node.name));
writer.write(" = ");
if (node.entityName) {
checkEntityNameAccessible();
writer.write(getSourceTextOfLocalNode(node.entityName));
writer.write(";");
}
else {
writer.write("require(");
writer.write(getSourceTextOfLocalNode(node.externalModuleName));
writer.write(");");
}
writer.writeLine();
function checkEntityNameAccessible() {
var symbolAccesibilityResult = resolver.isImportDeclarationEntityNameReferenceDeclarationVisibile(node.entityName);
if (symbolAccesibilityResult.accessibility === 0 /* Accessible */) {
if (symbolAccesibilityResult.aliasesToMakeVisible) {
writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible);
}
}
else {
reportedDeclarationError = true;
diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Import_declaration_0_is_using_private_name_1, getSourceTextOfLocalNode(node.name), symbolAccesibilityResult.errorSymbolName));
}
}
}
function emitModuleDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitDeclarationFlags(node);
write("module ");
emitSourceTextOfNode(node.name);
while (node.body.kind !== 189 /* ModuleBlock */) {
node = node.body;
write(".");
emitSourceTextOfNode(node.name);
}
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
write(" {");
writeLine();
increaseIndent();
emitLines(node.body.statements);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
}
function emitTypeAliasDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitDeclarationFlags(node);
write("type ");
emitSourceTextOfNode(node.name);
write(" = ");
getSymbolVisibilityDiagnosticMessage = getTypeAliasDeclarationVisibilityError;
resolver.writeTypeAtLocation(node.type, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer);
write(";");
writeLine();
}
function getTypeAliasDeclarationVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_type_alias_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_type_alias_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1;
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
};
}
}
function emitEnumDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitDeclarationFlags(node);
if (ts.isConstEnumDeclaration(node)) {
write("const ");
}
write("enum ");
emitSourceTextOfNode(node.name);
write(" {");
writeLine();
increaseIndent();
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
}
}
function emitEnumMemberDeclaration(node) {
emitJsDocComments(node);
emitSourceTextOfNode(node.name);
var enumMemberValue = resolver.getEnumMemberValue(node);
if (enumMemberValue !== undefined) {
write(" = ");
write(enumMemberValue.toString());
}
write(",");
writeLine();
}
function emitTypeParameters(typeParameters) {
function emitTypeParameter(node) {
function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
switch (node.parent.kind) {
case 184 /* ClassDeclaration */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
break;
case 185 /* InterfaceDeclaration */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
break;
case 130 /* ConstructSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 129 /* CallSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 125 /* Method */:
if (node.parent.flags & 128 /* Static */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === 184 /* ClassDeclaration */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
break;
case 182 /* FunctionDeclaration */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
default:
ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
};
}
increaseIndent();
emitJsDocComments(node);
decreaseIndent();
emitSourceTextOfNode(node.name);
if (node.constraint && (node.parent.kind !== 125 /* Method */ || !(node.parent.flags & 32 /* Private */))) {
write(" extends ");
getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError;
resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer);
}
}
if (typeParameters) {
write("<");
emitCommaList(typeParameters, emitTypeParameter);
write(">");
}
}
function emitHeritageClause(typeReferences, isImplementsList) {
if (typeReferences) {
write(isImplementsList ? " implements " : " extends ");
emitCommaList(typeReferences, emitTypeOfTypeReference);
}
function emitTypeOfTypeReference(node) {
getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError;
resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */ | 2 /* UseTypeOfFunction */, writer);
function getHeritageClauseVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
if (node.parent.kind === 184 /* ClassDeclaration */) {
if (symbolAccesibilityResult.errorModuleName) {
diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2;
}
else {
diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1;
}
}
else {
if (symbolAccesibilityResult.errorModuleName) {
diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2;
}
else {
diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1;
}
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.parent.name
};
}
}
}
function emitClassDeclaration(node) {
function emitParameterProperties(constructorDeclaration) {
if (constructorDeclaration) {
ts.forEach(constructorDeclaration.parameters, function (param) {
if (param.flags & 112 /* AccessibilityModifier */) {
emitPropertyDeclaration(param);
}
});
}
}
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitDeclarationFlags(node);
write("class ");
emitSourceTextOfNode(node.name);
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitTypeParameters(node.typeParameters);
if (node.baseType) {
emitHeritageClause([node.baseType], false);
}
emitHeritageClause(node.implementedTypes, true);
write(" {");
writeLine();
increaseIndent();
emitParameterProperties(getFirstConstructorWithBody(node));
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
}
function emitInterfaceDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitDeclarationFlags(node);
write("interface ");
emitSourceTextOfNode(node.name);
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitTypeParameters(node.typeParameters);
emitHeritageClause(node.baseTypes, false);
write(" {");
writeLine();
increaseIndent();
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
}
function emitPropertyDeclaration(node) {
emitJsDocComments(node);
emitDeclarationFlags(node);
emitVariableDeclaration(node);
write(";");
writeLine();
}
function emitVariableDeclaration(node) {
if (node.kind !== 181 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) {
emitSourceTextOfNode(node.name);
if (node.kind === 124 /* Property */ && (node.flags & 4 /* QuestionMark */)) {
write("?");
}
if (!(node.flags & 32 /* Private */)) {
write(": ");
getSymbolVisibilityDiagnosticMessage = getVariableDeclarationTypeVisibilityError;
resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer);
}
}
function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
if (node.kind === 181 /* VariableDeclaration */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1;
}
else if (node.kind === 124 /* Property */) {
if (node.flags & 128 /* Static */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.kind === 184 /* ClassDeclaration */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1;
}
}
return diagnosticMessage !== undefined ? {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
} : undefined;
}
}
function emitVariableStatement(node) {
var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); });
if (hasDeclarationWithEmit) {
emitJsDocComments(node);
emitDeclarationFlags(node);
if (node.flags & 2048 /* Let */) {
write("let ");
}
else if (node.flags & 4096 /* Const */) {
write("const ");
}
else {
write("var ");
}
emitCommaList(node.declarations, emitVariableDeclaration);
write(";");
writeLine();
}
}
function emitAccessorDeclaration(node) {
var accessors = getAllAccessorDeclarations(node.parent, node);
if (node === accessors.firstAccessor) {
emitJsDocComments(accessors.getAccessor);
emitJsDocComments(accessors.setAccessor);
emitDeclarationFlags(node);
emitSourceTextOfNode(node.name);
if (!(node.flags & 32 /* Private */)) {
write(": ");
getSymbolVisibilityDiagnosticMessage = getAccessorDeclarationTypeVisibilityError;
resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer);
}
write(";");
writeLine();
}
function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
if (node.kind === 128 /* SetAccessor */) {
if (node.parent.flags & 128 /* Static */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node.parameters[0],
typeName: node.name
};
}
else {
if (node.flags & 128 /* Static */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node.name,
typeName: undefined
};
}
}
}
function emitFunctionDeclaration(node) {
if ((node.kind !== 182 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) {
emitJsDocComments(node);
emitDeclarationFlags(node);
if (node.kind === 182 /* FunctionDeclaration */) {
write("function ");
emitSourceTextOfNode(node.name);
}
else if (node.kind === 126 /* Constructor */) {
write("constructor");
}
else {
emitSourceTextOfNode(node.name);
if (node.flags & 4 /* QuestionMark */) {
write("?");
}
}
emitSignatureDeclaration(node);
}
}
function emitConstructSignatureDeclaration(node) {
emitJsDocComments(node);
write("new ");
emitSignatureDeclaration(node);
}
function emitSignatureDeclaration(node) {
if (node.kind === 129 /* CallSignature */ || node.kind === 131 /* IndexSignature */) {
emitJsDocComments(node);
}
emitTypeParameters(node.typeParameters);
if (node.kind === 131 /* IndexSignature */) {
write("[");
}
else {
write("(");
}
emitCommaList(node.parameters, emitParameterDeclaration);
if (node.kind === 131 /* IndexSignature */) {
write("]");
}
else {
write(")");
}
if (node.kind !== 126 /* Constructor */ && !(node.flags & 32 /* Private */)) {
write(": ");
getSymbolVisibilityDiagnosticMessage = getReturnTypeVisibilityError;
resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer);
}
write(";");
writeLine();
function getReturnTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
switch (node.kind) {
case 130 /* ConstructSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 129 /* CallSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 131 /* IndexSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 125 /* Method */:
if (node.flags & 128 /* Static */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
}
else if (node.parent.kind === 184 /* ClassDeclaration */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
}
break;
case 182 /* FunctionDeclaration */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;
break;
default:
ts.Debug.fail("This is unknown kind for signature: " + node.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node.name || node
};
}
}
function emitParameterDeclaration(node) {
increaseIndent();
emitJsDocComments(node);
if (node.flags & 8 /* Rest */) {
write("...");
}
emitSourceTextOfNode(node.name);
if (node.initializer || (node.flags & 4 /* QuestionMark */)) {
write("?");
}
decreaseIndent();
if (!(node.parent.flags & 32 /* Private */)) {
write(": ");
getSymbolVisibilityDiagnosticMessage = getParameterDeclarationTypeVisibilityError;
resolver.writeTypeAtLocation(node, enclosingDeclaration, 2 /* UseTypeOfFunction */, writer);
}
function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
switch (node.parent.kind) {
case 126 /* Constructor */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
break;
case 130 /* ConstructSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 129 /* CallSignature */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 125 /* Method */:
if (node.parent.flags & 128 /* Static */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === 184 /* ClassDeclaration */) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
break;
case 182 /* FunctionDeclaration */:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
default:
ts.Debug.fail("This is unknown parent for parameter: " + node.parent.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
};
}
}
function emitNode(node) {
switch (node.kind) {
case 126 /* Constructor */:
case 182 /* FunctionDeclaration */:
case 125 /* Method */:
return emitFunctionDeclaration(node);
case 130 /* ConstructSignature */:
return emitConstructSignatureDeclaration(node);
case 129 /* CallSignature */:
case 131 /* IndexSignature */:
return emitSignatureDeclaration(node);
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
return emitAccessorDeclaration(node);
case 159 /* VariableStatement */:
return emitVariableStatement(node);
case 124 /* Property */:
return emitPropertyDeclaration(node);
case 185 /* InterfaceDeclaration */:
return emitInterfaceDeclaration(node);
case 184 /* ClassDeclaration */:
return emitClassDeclaration(node);
case 186 /* TypeAliasDeclaration */:
return emitTypeAliasDeclaration(node);
case 192 /* EnumMember */:
return emitEnumMemberDeclaration(node);
case 187 /* EnumDeclaration */:
return emitEnumDeclaration(node);
case 188 /* ModuleDeclaration */:
return emitModuleDeclaration(node);
case 190 /* ImportDeclaration */:
return emitImportDeclaration(node);
case 191 /* ExportAssignment */:
return emitExportAssignment(node);
case 193 /* SourceFile */:
return emitSourceFile(node);
}
}
function tryResolveScriptReference(sourceFile, reference) {
var referenceFileName = ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename));
return program.getSourceFile(referenceFileName);
}
var referencePathsOutput = "";
function writeReferencePath(referencedFile) {
var declFileName = referencedFile.flags & 1024 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts";
declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName, false);
referencePathsOutput += "/// <reference path=\"" + declFileName + "\" />" + newLine;
}
if (root) {
if (!compilerOptions.noResolve) {
var addedGlobalFileReference = false;
ts.forEach(root.referencedFiles, function (fileReference) {
var referencedFile = tryResolveScriptReference(root, fileReference);
if (referencedFile && ((referencedFile.flags & 1024 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile, compilerOptions) || !addedGlobalFileReference)) {
writeReferencePath(referencedFile);
if (!isExternalModuleOrDeclarationFile(referencedFile)) {
addedGlobalFileReference = true;
}
}
});
}
emitNode(root);
}
else {
var emittedReferencedFiles = [];
ts.forEach(program.getSourceFiles(), function (sourceFile) {
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
if (!compilerOptions.noResolve) {
ts.forEach(sourceFile.referencedFiles, function (fileReference) {
var referencedFile = tryResolveScriptReference(sourceFile, fileReference);
if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile))) {
writeReferencePath(referencedFile);
emittedReferencedFiles.push(referencedFile);
}
});
}
emitNode(sourceFile);
}
});
}
if (!reportedDeclarationError) {
var declarationOutput = referencePathsOutput;
var synchronousDeclarationOutput = writer.getText();
var appliedSyncOutputPos = 0;
ts.forEach(aliasDeclarationEmitInfo, function (aliasEmitInfo) {
if (aliasEmitInfo.asynchronousOutput) {
declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos);
declarationOutput += aliasEmitInfo.asynchronousOutput;
appliedSyncOutputPos = aliasEmitInfo.outputPos;
}
});
declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos);
writeFile(ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM);
}
}
var hasSemanticErrors = resolver.hasSemanticErrors();
var hasEarlyErrors = resolver.hasEarlyErrors(targetSourceFile);
function emitFile(jsFilePath, sourceFile) {
if (!hasEarlyErrors) {
emitJavaScript(jsFilePath, sourceFile);
if (!hasSemanticErrors && compilerOptions.declaration) {
emitDeclarations(jsFilePath, sourceFile);
}
}
}
if (targetSourceFile === undefined) {
ts.forEach(program.getSourceFiles(), function (sourceFile) {
if (shouldEmitToOwnFile(sourceFile, compilerOptions)) {
var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js");
emitFile(jsFilePath, sourceFile);
}
});
if (compilerOptions.out) {
emitFile(compilerOptions.out);
}
}
else {
if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) {
var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js");
emitFile(jsFilePath, targetSourceFile);
}
else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) {
emitFile(compilerOptions.out);
}
}
diagnostics.sort(ts.compareDiagnostics);
diagnostics = ts.deduplicateSortedDiagnostics(diagnostics);
var hasEmitterError = ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1 /* Error */; });
var returnCode;
if (hasEarlyErrors) {
returnCode = 1 /* AllOutputGenerationSkipped */;
}
else if (hasEmitterError) {
returnCode = 4 /* EmitErrorsEncountered */;
}
else if (hasSemanticErrors && compilerOptions.declaration) {
returnCode = 3 /* DeclarationGenerationSkipped */;
}
else if (hasSemanticErrors && !compilerOptions.declaration) {
returnCode = 2 /* JSGeneratedWithSemanticErrors */;
}
else {
returnCode = 0 /* Succeeded */;
}
return {
emitResultStatus: returnCode,
errors: diagnostics,
sourceMaps: sourceMapDataList
};
}
ts.emitFiles = emitFiles;
})(ts || (ts = {}));
var ts;
(function (ts) {
var nextSymbolId = 1;
var nextNodeId = 1;
var nextMergeId = 1;
function getDeclarationOfKind(symbol, kind) {
var declarations = symbol.declarations;
for (var i = 0; i < declarations.length; i++) {
var declaration = declarations[i];
if (declaration.kind === kind) {
return declaration;
}
}
return undefined;
}
ts.getDeclarationOfKind = getDeclarationOfKind;
var stringWriters = [];
function getSingleLineStringWriter() {
if (stringWriters.length == 0) {
var str = "";
var writeText = function (text) { return str += text; };
return {
string: function () { return str; },
writeKeyword: writeText,
writeOperator: writeText,
writePunctuation: writeText,
writeSpace: writeText,
writeStringLiteral: writeText,
writeParameter: writeText,
writeSymbol: writeText,
writeLine: function () { return str += " "; },
increaseIndent: function () {
},
decreaseIndent: function () {
},
clear: function () { return str = ""; },
trackSymbol: function () {
}
};
}
return stringWriters.pop();
}
ts.getSingleLineStringWriter = getSingleLineStringWriter;
function createTypeChecker(program, fullTypeCheck) {
var Symbol = ts.objectAllocator.getSymbolConstructor();
var Type = ts.objectAllocator.getTypeConstructor();
var Signature = ts.objectAllocator.getSignatureConstructor();
var typeCount = 0;
var emptyArray = [];
var emptySymbols = {};
var compilerOptions = program.getCompilerOptions();
var checker = {
getProgram: function () { return program; },
getDiagnostics: getDiagnostics,
getGlobalDiagnostics: getGlobalDiagnostics,
getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); },
getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); },
getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); },
getTypeCount: function () { return typeCount; },
checkProgram: checkProgram,
emitFiles: invokeEmitter,
getParentOfSymbol: getParentOfSymbol,
getNarrowedTypeOfSymbol: getNarrowedTypeOfSymbol,
getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol,
getPropertiesOfType: getPropertiesOfType,
getPropertyOfType: getPropertyOfType,
getSignaturesOfType: getSignaturesOfType,
getIndexTypeOfType: getIndexTypeOfType,
getReturnTypeOfSignature: getReturnTypeOfSignature,
getSymbolsInScope: getSymbolsInScope,
getSymbolInfo: getSymbolInfo,
getTypeOfNode: getTypeOfNode,
typeToString: typeToString,
getSymbolDisplayBuilder: getSymbolDisplayBuilder,
symbolToString: symbolToString,
getAugmentedPropertiesOfType: getAugmentedPropertiesOfType,
getRootSymbols: getRootSymbols,
getContextualType: getContextualType,
getFullyQualifiedName: getFullyQualifiedName,
getResolvedSignature: getResolvedSignature,
getEnumMemberValue: getEnumMemberValue,
isValidPropertyAccess: isValidPropertyAccess,
getSignatureFromDeclaration: getSignatureFromDeclaration,
isImplementationOfOverload: isImplementationOfOverload,
getAliasedSymbol: resolveImport,
isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
hasEarlyErrors: hasEarlyErrors
};
var undefinedSymbol = createSymbol(4 /* Property */ | 268435456 /* Transient */, "undefined");
var argumentsSymbol = createSymbol(4 /* Property */ | 268435456 /* Transient */, "arguments");
var unknownSymbol = createSymbol(4 /* Property */ | 268435456 /* Transient */, "unknown");
var resolvingSymbol = createSymbol(268435456 /* Transient */, "__resolving__");
var anyType = createIntrinsicType(1 /* Any */, "any");
var stringType = createIntrinsicType(2 /* String */, "string");
var numberType = createIntrinsicType(4 /* Number */, "number");
var booleanType = createIntrinsicType(8 /* Boolean */, "boolean");
var voidType = createIntrinsicType(16 /* Void */, "void");
var undefinedType = createIntrinsicType(32 /* Undefined */, "undefined");
var nullType = createIntrinsicType(64 /* Null */, "null");
var unknownType = createIntrinsicType(1 /* Any */, "unknown");
var resolvingType = createIntrinsicType(1 /* Any */, "__resolving__");
var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var inferenceFailureType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var anySignature = createSignature(undefined, undefined, emptyArray, anyType, 0, false, false);
var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, 0, false, false);
var globals = {};
var globalArraySymbol;
var globalObjectType;
var globalFunctionType;
var globalArrayType;
var globalStringType;
var globalNumberType;
var globalBooleanType;
var globalRegExpType;
var globalTemplateStringsArrayType;
var tupleTypes = {};
var unionTypes = {};
var stringLiteralTypes = {};
var emitExtends = false;
var mergedSymbols = [];
var symbolLinks = [];
var nodeLinks = [];
var potentialThisCollisions = [];
var diagnostics = [];
var diagnosticsModified = false;
function addDiagnostic(diagnostic) {
diagnostics.push(diagnostic);
diagnosticsModified = true;
}
function error(location, message, arg0, arg1, arg2) {
var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2);
addDiagnostic(diagnostic);
}
function createSymbol(flags, name) {
return new Symbol(flags, name);
}
function getExcludedSymbolFlags(flags) {
var result = 0;
if (flags & 2 /* BlockScopedVariable */)
result |= 107455 /* BlockScopedVariableExcludes */;
if (flags & 1 /* FunctionScopedVariable */)
result |= 107454 /* FunctionScopedVariableExcludes */;
if (flags & 4 /* Property */)
result |= 107455 /* PropertyExcludes */;
if (flags & 8 /* EnumMember */)
result |= 107455 /* EnumMemberExcludes */;
if (flags & 16 /* Function */)
result |= 106927 /* FunctionExcludes */;
if (flags & 32 /* Class */)
result |= 3258879 /* ClassExcludes */;
if (flags & 64 /* Interface */)
result |= 3152288 /* InterfaceExcludes */;
if (flags & 256 /* RegularEnum */)
result |= 3258623 /* RegularEnumExcludes */;
if (flags & 128 /* ConstEnum */)
result |= 3259263 /* ConstEnumExcludes */;
if (flags & 512 /* ValueModule */)
result |= 106639 /* ValueModuleExcludes */;
if (flags & 8192 /* Method */)
result |= 99263 /* MethodExcludes */;
if (flags & 32768 /* GetAccessor */)
result |= 41919 /* GetAccessorExcludes */;
if (flags & 65536 /* SetAccessor */)
result |= 74687 /* SetAccessorExcludes */;
if (flags & 1048576 /* TypeParameter */)
result |= 2103776 /* TypeParameterExcludes */;
if (flags & 2097152 /* TypeAlias */)
result |= 3152352 /* TypeAliasExcludes */;
if (flags & 33554432 /* Import */)
result |= 33554432 /* ImportExcludes */;
return result;
}
function recordMergedSymbol(target, source) {
if (!source.mergeId)
source.mergeId = nextMergeId++;
mergedSymbols[source.mergeId] = target;
}
function cloneSymbol(symbol) {
var result = createSymbol(symbol.flags | 134217728 /* Merged */, symbol.name);
result.declarations = symbol.declarations.slice(0);
result.parent = symbol.parent;
if (symbol.valueDeclaration)
result.valueDeclaration = symbol.valueDeclaration;
if (symbol.constEnumOnlyModule)
result.constEnumOnlyModule = true;
if (symbol.members)
result.members = cloneSymbolTable(symbol.members);
if (symbol.exports)
result.exports = cloneSymbolTable(symbol.exports);
recordMergedSymbol(result, symbol);
return result;
}
function extendSymbol(target, source) {
if (!(target.flags & getExcludedSymbolFlags(source.flags))) {
if (source.flags & 512 /* ValueModule */ && target.flags & 512 /* ValueModule */ && target.constEnumOnlyModule && !source.constEnumOnlyModule) {
target.constEnumOnlyModule = false;
}
target.flags |= source.flags;
if (!target.valueDeclaration && source.valueDeclaration)
target.valueDeclaration = source.valueDeclaration;
ts.forEach(source.declarations, function (node) {
target.declarations.push(node);
});
if (source.members) {
if (!target.members)
target.members = {};
extendSymbolTable(target.members, source.members);
}
if (source.exports) {
if (!target.exports)
target.exports = {};
extendSymbolTable(target.exports, source.exports);
}
recordMergedSymbol(target, source);
}
else {
var message = target.flags & 2 /* BlockScopedVariable */ || source.flags & 2 /* BlockScopedVariable */ ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
ts.forEach(source.declarations, function (node) {
error(node.name ? node.name : node, message, symbolToString(source));
});
ts.forEach(target.declarations, function (node) {
error(node.name ? node.name : node, message, symbolToString(source));
});
}
}
function cloneSymbolTable(symbolTable) {
var result = {};
for (var id in symbolTable) {
if (ts.hasProperty(symbolTable, id)) {
result[id] = symbolTable[id];
}
}
return result;
}
function extendSymbolTable(target, source) {
for (var id in source) {
if (ts.hasProperty(source, id)) {
if (!ts.hasProperty(target, id)) {
target[id] = source[id];
}
else {
var symbol = target[id];
if (!(symbol.flags & 134217728 /* Merged */)) {
target[id] = symbol = cloneSymbol(symbol);
}
extendSymbol(symbol, source[id]);
}
}
}
}
function getSymbolLinks(symbol) {
if (symbol.flags & 268435456 /* Transient */)
return symbol;
if (!symbol.id)
symbol.id = nextSymbolId++;
return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {});
}
function getNodeLinks(node) {
if (!node.id)
node.id = nextNodeId++;
return nodeLinks[node.id] || (nodeLinks[node.id] = {});
}
function getSourceFile(node) {
return ts.getAncestor(node, 193 /* SourceFile */);
}
function isGlobalSourceFile(node) {
return node.kind === 193 /* SourceFile */ && !ts.isExternalModule(node);
}
function getSymbol(symbols, name, meaning) {
if (meaning && ts.hasProperty(symbols, name)) {
var symbol = symbols[name];
ts.Debug.assert((symbol.flags & 67108864 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
if (symbol.flags & meaning) {
return symbol;
}
if (symbol.flags & 33554432 /* Import */) {
var target = resolveImport(symbol);
if (target === unknownSymbol || target.flags & meaning) {
return symbol;
}
}
}
}
function isDefinedBefore(node1, node2) {
var file1 = ts.getSourceFileOfNode(node1);
var file2 = ts.getSourceFileOfNode(node2);
if (file1 === file2) {
return node1.pos <= node2.pos;
}
if (!compilerOptions.out) {
return true;
}
var sourceFiles = program.getSourceFiles();
return sourceFiles.indexOf(file1) <= sourceFiles.indexOf(file2);
}
function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) {
var result;
var lastLocation;
var propertyWithInvalidInitializer;
var errorLocation = location;
loop: while (location) {
if (location.locals && !isGlobalSourceFile(location)) {
if (result = getSymbol(location.locals, name, meaning)) {
break loop;
}
}
switch (location.kind) {
case 193 /* SourceFile */:
if (!ts.isExternalModule(location))
break;
case 188 /* ModuleDeclaration */:
if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 35653619 /* ModuleMember */)) {
break loop;
}
break;
case 187 /* EnumDeclaration */:
if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) {
break loop;
}
break;
case 124 /* Property */:
if (location.parent.kind === 184 /* ClassDeclaration */ && !(location.flags & 128 /* Static */)) {
var ctor = findConstructorDeclaration(location.parent);
if (ctor && ctor.locals) {
if (getSymbol(ctor.locals, name, meaning & 107455 /* Value */)) {
propertyWithInvalidInitializer = location;
}
}
}
break;
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 3152352 /* Type */)) {
if (lastLocation && lastLocation.flags & 128 /* Static */) {
error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
return undefined;
}
break loop;
}
break;
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 182 /* FunctionDeclaration */:
case 150 /* ArrowFunction */:
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
break;
case 149 /* FunctionExpression */:
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
var id = location.name;
if (id && name === id.text) {
result = location.symbol;
break loop;
}
break;
case 178 /* CatchBlock */:
var id = location.variable;
if (name === id.text) {
result = location.symbol;
break loop;
}
break;
}
lastLocation = location;
location = location.parent;
}
if (!result) {
result = getSymbol(globals, name, meaning);
}
if (!result) {
if (nameNotFoundMessage) {
error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
}
return undefined;
}
if (nameNotFoundMessage) {
if (propertyWithInvalidInitializer) {
var propertyName = propertyWithInvalidInitializer.name;
error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
return undefined;
}
if (result.flags & 2 /* BlockScopedVariable */) {
var declaration = ts.forEach(result.declarations, function (d) { return d.flags & 6144 /* BlockScoped */ ? d : undefined; });
ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined");
if (!isDefinedBefore(declaration, errorLocation)) {
error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name));
}
}
}
return result;
}
function resolveImport(symbol) {
ts.Debug.assert((symbol.flags & 33554432 /* Import */) !== 0, "Should only get Imports here.");
var links = getSymbolLinks(symbol);
if (!links.target) {
links.target = resolvingSymbol;
var node = getDeclarationOfKind(symbol, 190 /* ImportDeclaration */);
var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : getSymbolOfPartOfRightHandSideOfImport(node.entityName, node);
if (links.target === resolvingSymbol) {
links.target = target || unknownSymbol;
}
else {
error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol));
}
}
else if (links.target === resolvingSymbol) {
links.target = unknownSymbol;
}
return links.target;
}
function getSymbolOfPartOfRightHandSideOfImport(entityName, importDeclaration) {
if (!importDeclaration) {
importDeclaration = ts.getAncestor(entityName, 190 /* ImportDeclaration */);
ts.Debug.assert(importDeclaration !== undefined);
}
if (entityName.kind === 63 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
entityName = entityName.parent;
}
if (entityName.kind === 63 /* Identifier */ || entityName.parent.kind === 121 /* QualifiedName */) {
return resolveEntityName(importDeclaration, entityName, 1536 /* Namespace */);
}
else {
ts.Debug.assert(entityName.parent.kind === 190 /* ImportDeclaration */);
return resolveEntityName(importDeclaration, entityName, 107455 /* Value */ | 3152352 /* Type */ | 1536 /* Namespace */);
}
}
function getFullyQualifiedName(symbol) {
return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
}
function resolveEntityName(location, name, meaning) {
if (name.kind === 63 /* Identifier */) {
var symbol = resolveName(location, name.text, meaning, ts.Diagnostics.Cannot_find_name_0, name);
if (!symbol) {
return;
}
}
else if (name.kind === 121 /* QualifiedName */) {
var namespace = resolveEntityName(location, name.left, 1536 /* Namespace */);
if (!namespace || namespace === unknownSymbol || name.right.kind === 120 /* Missing */)
return;
var symbol = getSymbol(namespace.exports, name.right.text, meaning);
if (!symbol) {
error(location, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(name.right));
return;
}
}
else {
return;
}
ts.Debug.assert((symbol.flags & 67108864 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
return symbol.flags & meaning ? symbol : resolveImport(symbol);
}
function isExternalModuleNameRelative(moduleName) {
return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\";
}
function resolveExternalModuleName(location, moduleLiteral) {
var searchPath = ts.getDirectoryPath(getSourceFile(location).filename);
var moduleName = moduleLiteral.text;
if (!moduleName)
return;
var isRelative = isExternalModuleNameRelative(moduleName);
if (!isRelative) {
var symbol = getSymbol(globals, '"' + moduleName + '"', 512 /* ValueModule */);
if (symbol) {
return getResolvedExportSymbol(symbol);
}
}
while (true) {
var filename = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
var sourceFile = program.getSourceFile(filename + ".ts") || program.getSourceFile(filename + ".d.ts");
if (sourceFile || isRelative)
break;
var parentPath = ts.getDirectoryPath(searchPath);
if (parentPath === searchPath)
break;
searchPath = parentPath;
}
if (sourceFile) {
if (sourceFile.symbol) {
return getResolvedExportSymbol(sourceFile.symbol);
}
error(moduleLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.filename);
return;
}
error(moduleLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName);
}
function getResolvedExportSymbol(moduleSymbol) {
var symbol = getExportAssignmentSymbol(moduleSymbol);
if (symbol) {
if (symbol.flags & (107455 /* Value */ | 3152352 /* Type */ | 1536 /* Namespace */)) {
return symbol;
}
if (symbol.flags & 33554432 /* Import */) {
return resolveImport(symbol);
}
}
return moduleSymbol;
}
function getExportAssignmentSymbol(symbol) {
checkTypeOfExportAssignmentSymbol(symbol);
var symbolLinks = getSymbolLinks(symbol);
return symbolLinks.exportAssignSymbol === unknownSymbol ? undefined : symbolLinks.exportAssignSymbol;
}
function checkTypeOfExportAssignmentSymbol(containerSymbol) {
var symbolLinks = getSymbolLinks(containerSymbol);
if (!symbolLinks.exportAssignSymbol) {
var exportInformation = collectExportInformationForSourceFileOrModule(containerSymbol);
if (exportInformation.exportAssignments.length) {
if (exportInformation.exportAssignments.length > 1) {
ts.forEach(exportInformation.exportAssignments, function (node) { return error(node, ts.Diagnostics.A_module_cannot_have_more_than_one_export_assignment); });
}
var node = exportInformation.exportAssignments[0];
if (exportInformation.hasExportedMember) {
error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);
}
if (node.exportName.text) {
var meaning = 107455 /* Value */ | 3152352 /* Type */ | 1536 /* Namespace */;
var exportSymbol = resolveName(node, node.exportName.text, meaning, ts.Diagnostics.Cannot_find_name_0, node.exportName);
}
}
symbolLinks.exportAssignSymbol = exportSymbol || unknownSymbol;
}
}
function collectExportInformationForSourceFileOrModule(symbol) {
var seenExportedMember = false;
var result = [];
ts.forEach(symbol.declarations, function (declaration) {
var block = (declaration.kind === 193 /* SourceFile */ ? declaration : declaration.body);
ts.forEach(block.statements, function (node) {
if (node.kind === 191 /* ExportAssignment */) {
result.push(node);
}
else {
seenExportedMember = seenExportedMember || (node.flags & 1 /* Export */) !== 0;
}
});
});
return {
hasExportedMember: seenExportedMember,
exportAssignments: result
};
}
function getMergedSymbol(symbol) {
var merged;
return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol;
}
function getSymbolOfNode(node) {
return getMergedSymbol(node.symbol);
}
function getParentOfSymbol(symbol) {
return getMergedSymbol(symbol.parent);
}
function getExportSymbolOfValueSymbolIfExported(symbol) {
return symbol && (symbol.flags & 4194304 /* ExportValue */) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol;
}
function symbolIsValue(symbol) {
if (symbol.flags & 67108864 /* Instantiated */) {
return symbolIsValue(getSymbolLinks(symbol).target);
}
if (symbol.flags & 107455 /* Value */) {
return true;
}
if (symbol.flags & 33554432 /* Import */) {
return (resolveImport(symbol).flags & 107455 /* Value */) !== 0;
}
return false;
}
function findConstructorDeclaration(node) {
var members = node.members;
for (var i = 0; i < members.length; i++) {
var member = members[i];
if (member.kind === 126 /* Constructor */ && member.body) {
return member;
}
}
}
function createType(flags) {
var result = new Type(checker, flags);
result.id = typeCount++;
return result;
}
function createIntrinsicType(kind, intrinsicName) {
var type = createType(kind);
type.intrinsicName = intrinsicName;
return type;
}
function createObjectType(kind, symbol) {
var type = createType(kind);
type.symbol = symbol;
return type;
}
function isReservedMemberName(name) {
return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */;
}
function getNamedMembers(members) {
var result;
for (var id in members) {
if (ts.hasProperty(members, id)) {
if (!isReservedMemberName(id)) {
if (!result)
result = [];
var symbol = members[id];
if (symbolIsValue(symbol)) {
result.push(symbol);
}
}
}
}
return result || emptyArray;
}
function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
type.members = members;
type.properties = getNamedMembers(members);
type.callSignatures = callSignatures;
type.constructSignatures = constructSignatures;
if (stringIndexType)
type.stringIndexType = stringIndexType;
if (numberIndexType)
type.numberIndexType = numberIndexType;
return type;
}
function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
return setObjectTypeMembers(createObjectType(32768 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function isOptionalProperty(propertySymbol) {
return propertySymbol.valueDeclaration && propertySymbol.valueDeclaration.flags & 4 /* QuestionMark */ && propertySymbol.valueDeclaration.kind !== 123 /* Parameter */;
}
function forEachSymbolTableInScope(enclosingDeclaration, callback) {
var result;
for (var location = enclosingDeclaration; location; location = location.parent) {
if (location.locals && !isGlobalSourceFile(location)) {
if (result = callback(location.locals)) {
return result;
}
}
switch (location.kind) {
case 193 /* SourceFile */:
if (!ts.isExternalModule(location)) {
break;
}
case 188 /* ModuleDeclaration */:
if (result = callback(getSymbolOfNode(location).exports)) {
return result;
}
break;
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
if (result = callback(getSymbolOfNode(location).members)) {
return result;
}
break;
}
}
return callback(globals);
}
function getQualifiedLeftMeaning(rightMeaning) {
return rightMeaning === 107455 /* Value */ ? 107455 /* Value */ : 1536 /* Namespace */;
}
function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) {
function getAccessibleSymbolChainFromSymbolTable(symbols) {
function canQualifySymbol(symbolFromSymbolTable, meaning) {
if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) {
return true;
}
var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing);
return !!accessibleParent;
}
function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) {
if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) {
return !ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); }) && canQualifySymbol(symbolFromSymbolTable, meaning);
}
}
if (isAccessible(ts.lookUp(symbols, symbol.name))) {
return [symbol];
}
return ts.forEachValue(symbols, function (symbolFromSymbolTable) {
if (symbolFromSymbolTable.flags & 33554432 /* Import */) {
if (!useOnlyExternalAliasing || ts.forEach(symbolFromSymbolTable.declarations, function (declaration) { return declaration.kind === 190 /* ImportDeclaration */ && declaration.externalModuleName; })) {
var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable);
if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) {
return [symbolFromSymbolTable];
}
var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined;
if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
}
}
}
});
}
if (symbol) {
return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
}
}
function needsQualification(symbol, enclosingDeclaration, meaning) {
var qualify = false;
forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) {
if (!ts.hasProperty(symbolTable, symbol.name)) {
return false;
}
var symbolFromSymbolTable = symbolTable[symbol.name];
if (symbolFromSymbolTable === symbol) {
return true;
}
symbolFromSymbolTable = (symbolFromSymbolTable.flags & 33554432 /* Import */) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable;
if (symbolFromSymbolTable.flags & meaning) {
qualify = true;
return true;
}
return false;
});
return qualify;
}
function isSymbolAccessible(symbol, enclosingDeclaration, meaning) {
if (symbol && enclosingDeclaration && !(symbol.flags & 1048576 /* TypeParameter */)) {
var initialSymbol = symbol;
var meaningToLook = meaning;
while (symbol) {
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false);
if (accessibleSymbolChain) {
var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]);
if (!hasAccessibleDeclarations) {
return {
accessibility: 1 /* NotAccessible */,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536 /* Namespace */) : undefined
};
}
return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasAccessibleDeclarations.aliasesToMakeVisible };
}
meaningToLook = getQualifiedLeftMeaning(meaning);
symbol = getParentOfSymbol(symbol);
}
var symbolExternalModule = ts.forEach(initialSymbol.declarations, function (declaration) { return getExternalModuleContainer(declaration); });
if (symbolExternalModule) {
var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration);
if (symbolExternalModule !== enclosingExternalModule) {
return {
accessibility: 2 /* CannotBeNamed */,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
errorModuleName: symbolToString(symbolExternalModule)
};
}
}
return {
accessibility: 1 /* NotAccessible */,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning)
};
}
return { accessibility: 0 /* Accessible */ };
function getExternalModuleContainer(declaration) {
for (; declaration; declaration = declaration.parent) {
if (hasExternalModuleSymbol(declaration)) {
return getSymbolOfNode(declaration);
}
}
}
}
function hasExternalModuleSymbol(declaration) {
return (declaration.kind === 188 /* ModuleDeclaration */ && declaration.name.kind === 7 /* StringLiteral */) || (declaration.kind === 193 /* SourceFile */ && ts.isExternalModule(declaration));
}
function hasVisibleDeclarations(symbol) {
var aliasesToMakeVisible;
if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) {
return undefined;
}
return { aliasesToMakeVisible: aliasesToMakeVisible };
function getIsDeclarationVisible(declaration) {
if (!isDeclarationVisible(declaration)) {
if (declaration.kind === 190 /* ImportDeclaration */ && !(declaration.flags & 1 /* Export */) && isDeclarationVisible(declaration.parent)) {
getNodeLinks(declaration).isVisible = true;
if (aliasesToMakeVisible) {
if (!ts.contains(aliasesToMakeVisible, declaration)) {
aliasesToMakeVisible.push(declaration);
}
}
else {
aliasesToMakeVisible = [declaration];
}
return true;
}
return false;
}
return true;
}
}
function isImportDeclarationEntityNameReferenceDeclarationVisibile(entityName) {
var firstIdentifier = getFirstIdentifier(entityName);
var symbolOfNameSpace = resolveName(entityName.parent, firstIdentifier.text, 1536 /* Namespace */, ts.Diagnostics.Cannot_find_name_0, firstIdentifier);
var hasNamespaceDeclarationsVisibile = hasVisibleDeclarations(symbolOfNameSpace);
return hasNamespaceDeclarationsVisibile ? { accessibility: 0 /* Accessible */, aliasesToMakeVisible: hasNamespaceDeclarationsVisibile.aliasesToMakeVisible } : { accessibility: 1 /* NotAccessible */, errorSymbolName: ts.declarationNameToString(firstIdentifier) };
}
function releaseStringWriter(writer) {
writer.clear();
stringWriters.push(writer);
}
function writeKeyword(writer, kind) {
writer.writeKeyword(ts.tokenToString(kind));
}
function writePunctuation(writer, kind) {
writer.writePunctuation(ts.tokenToString(kind));
}
function writeOperator(writer, kind) {
writer.writeOperator(ts.tokenToString(kind));
}
function writeSpace(writer) {
writer.writeSpace(" ");
}
function symbolToString(symbol, enclosingDeclaration, meaning) {
var writer = getSingleLineStringWriter();
getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning);
var result = writer.string();
releaseStringWriter(writer);
return result;
}
function typeToString(type, enclosingDeclaration, flags) {
var writer = getSingleLineStringWriter();
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
var result = writer.string();
releaseStringWriter(writer);
var maxLength = compilerOptions.noErrorTruncation || flags & 4 /* NoTruncation */ ? undefined : 100;
if (maxLength && result.length >= maxLength) {
result = result.substr(0, maxLength - "...".length) + "...";
}
return result;
}
function getTypeAliasForTypeLiteral(type) {
if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */) {
var node = type.symbol.declarations[0].parent;
while (node.kind === 138 /* ParenType */) {
node = node.parent;
}
if (node.kind === 186 /* TypeAliasDeclaration */) {
return getSymbolOfNode(node);
}
}
return undefined;
}
var _displayBuilder;
function getSymbolDisplayBuilder() {
function appendSymbolNameOnly(symbol, writer) {
if (symbol.declarations && symbol.declarations.length > 0) {
var declaration = symbol.declarations[0];
if (declaration.name) {
writer.writeSymbol(ts.declarationNameToString(declaration.name), symbol);
return;
}
}
writer.writeSymbol(symbol.name, symbol);
}
function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags) {
var parentSymbol;
function appendParentTypeArgumentsAndSymbolName(symbol) {
if (parentSymbol) {
if (flags & 1 /* WriteTypeParametersOrArguments */) {
if (symbol.flags & 67108864 /* Instantiated */) {
buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration);
}
else {
buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration);
}
}
writePunctuation(writer, 19 /* DotToken */);
}
parentSymbol = symbol;
appendSymbolNameOnly(symbol, writer);
}
writer.trackSymbol(symbol, enclosingDeclaration, meaning);
function walkSymbol(symbol, meaning) {
if (symbol) {
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2 /* UseOnlyExternalAliasing */));
if (!accessibleSymbolChain || needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning));
}
if (accessibleSymbolChain) {
for (var i = 0, n = accessibleSymbolChain.length; i < n; i++) {
appendParentTypeArgumentsAndSymbolName(accessibleSymbolChain[i]);
}
}
else {
if (!parentSymbol && ts.forEach(symbol.declarations, function (declaration) { return hasExternalModuleSymbol(declaration); })) {
return;
}
if (symbol.flags & 2048 /* TypeLiteral */ || symbol.flags & 4096 /* ObjectLiteral */) {
return;
}
appendParentTypeArgumentsAndSymbolName(symbol);
}
}
}
if (enclosingDeclaration && !(symbol.flags & 1048576 /* TypeParameter */)) {
walkSymbol(symbol, meaning);
return;
}
return appendParentTypeArgumentsAndSymbolName(symbol);
}
function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, typeStack) {
var globalFlagsToPass = globalFlags & 16 /* WriteOwnNameForAnyLike */;
return writeType(type, globalFlags);
function writeType(type, flags) {
if (type.flags & 127 /* Intrinsic */) {
writer.writeKeyword(!(globalFlags & 16 /* WriteOwnNameForAnyLike */) && (type.flags & 1 /* Any */) ? "any" : type.intrinsicName);
}
else if (type.flags & 4096 /* Reference */) {
writeTypeReference(type, flags);
}
else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) {
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 3152352 /* Type */);
}
else if (type.flags & 8192 /* Tuple */) {
writeTupleType(type);
}
else if (type.flags & 16384 /* Union */) {
writeUnionType(type, flags);
}
else if (type.flags & 32768 /* Anonymous */) {
writeAnonymousType(type, flags);
}
else if (type.flags & 256 /* StringLiteral */) {
writer.writeStringLiteral(type.text);
}
else {
writePunctuation(writer, 13 /* OpenBraceToken */);
writeSpace(writer);
writePunctuation(writer, 20 /* DotDotDotToken */);
writeSpace(writer);
writePunctuation(writer, 14 /* CloseBraceToken */);
}
}
function writeTypeList(types, union) {
for (var i = 0; i < types.length; i++) {
if (i > 0) {
if (union) {
writeSpace(writer);
}
writePunctuation(writer, union ? 43 /* BarToken */ : 22 /* CommaToken */);
writeSpace(writer);
}
writeType(types[i], union ? 64 /* InElementType */ : 0 /* None */);
}
}
function writeTypeReference(type, flags) {
if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) {
writeType(type.typeArguments[0], 64 /* InElementType */);
writePunctuation(writer, 17 /* OpenBracketToken */);
writePunctuation(writer, 18 /* CloseBracketToken */);
}
else {
buildSymbolDisplay(type.target.symbol, writer, enclosingDeclaration, 3152352 /* Type */);
writePunctuation(writer, 23 /* LessThanToken */);
writeTypeList(type.typeArguments, false);
writePunctuation(writer, 24 /* GreaterThanToken */);
}
}
function writeTupleType(type) {
writePunctuation(writer, 17 /* OpenBracketToken */);
writeTypeList(type.elementTypes, false);
writePunctuation(writer, 18 /* CloseBracketToken */);
}
function writeUnionType(type, flags) {
if (flags & 64 /* InElementType */) {
writePunctuation(writer, 15 /* OpenParenToken */);
}
writeTypeList(type.types, true);
if (flags & 64 /* InElementType */) {
writePunctuation(writer, 16 /* CloseParenToken */);
}
}
function writeAnonymousType(type, flags) {
if (type.symbol && type.symbol.flags & (32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) {
writeTypeofSymbol(type);
}
else if (shouldWriteTypeOfFunctionSymbol()) {
writeTypeofSymbol(type);
}
else if (typeStack && ts.contains(typeStack, type)) {
var typeAlias = getTypeAliasForTypeLiteral(type);
if (typeAlias) {
buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 3152352 /* Type */);
}
else {
writeKeyword(writer, 109 /* AnyKeyword */);
}
}
else {
if (!typeStack) {
typeStack = [];
}
typeStack.push(type);
writeLiteralType(type, flags);
typeStack.pop();
}
function shouldWriteTypeOfFunctionSymbol() {
if (type.symbol) {
var isStaticMethodSymbol = !!(type.symbol.flags & 8192 /* Method */ && ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 128 /* Static */; }));
var isNonLocalFunctionSymbol = !!(type.symbol.flags & 16 /* Function */) && (type.symbol.parent || ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 193 /* SourceFile */ || declaration.parent.kind === 189 /* ModuleBlock */; }));
if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
return !!(flags & 2 /* UseTypeOfFunction */) || (typeStack && ts.contains(typeStack, type));
}
}
}
}
function writeTypeofSymbol(type) {
writeKeyword(writer, 95 /* TypeOfKeyword */);
writeSpace(writer);
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455 /* Value */);
}
function writeLiteralType(type, flags) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) {
if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
writePunctuation(writer, 13 /* OpenBraceToken */);
writePunctuation(writer, 14 /* CloseBraceToken */);
return;
}
if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
if (flags & 64 /* InElementType */) {
writePunctuation(writer, 15 /* OpenParenToken */);
}
buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8 /* WriteArrowStyleSignature */, typeStack);
if (flags & 64 /* InElementType */) {
writePunctuation(writer, 16 /* CloseParenToken */);
}
return;
}
if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
if (flags & 64 /* InElementType */) {
writePunctuation(writer, 15 /* OpenParenToken */);
}
writeKeyword(writer, 86 /* NewKeyword */);
writeSpace(writer);
buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8 /* WriteArrowStyleSignature */, typeStack);
if (flags & 64 /* InElementType */) {
writePunctuation(writer, 16 /* CloseParenToken */);
}
return;
}
}
writePunctuation(writer, 13 /* OpenBraceToken */);
writer.writeLine();
writer.increaseIndent();
for (var i = 0; i < resolved.callSignatures.length; i++) {
buildSignatureDisplay(resolved.callSignatures[i], writer, enclosingDeclaration, globalFlagsToPass, typeStack);
writePunctuation(writer, 21 /* SemicolonToken */);
writer.writeLine();
}
for (var i = 0; i < resolved.constructSignatures.length; i++) {
writeKeyword(writer, 86 /* NewKeyword */);
writeSpace(writer);
buildSignatureDisplay(resolved.constructSignatures[i], writer, enclosingDeclaration, globalFlagsToPass, typeStack);
writePunctuation(writer, 21 /* SemicolonToken */);
writer.writeLine();
}
if (resolved.stringIndexType) {
writePunctuation(writer, 17 /* OpenBracketToken */);
writer.writeParameter("x");
writePunctuation(writer, 50 /* ColonToken */);
writeSpace(writer);
writeKeyword(writer, 118 /* StringKeyword */);
writePunctuation(writer, 18 /* CloseBracketToken */);
writePunctuation(writer, 50 /* ColonToken */);
writeSpace(writer);
writeType(resolved.stringIndexType, 0 /* None */);
writePunctuation(writer, 21 /* SemicolonToken */);
writer.writeLine();
}
if (resolved.numberIndexType) {
writePunctuation(writer, 17 /* OpenBracketToken */);
writer.writeParameter("x");
writePunctuation(writer, 50 /* ColonToken */);
writeSpace(writer);
writeKeyword(writer, 116 /* NumberKeyword */);
writePunctuation(writer, 18 /* CloseBracketToken */);
writePunctuation(writer, 50 /* ColonToken */);
writeSpace(writer);
writeType(resolved.numberIndexType, 0 /* None */);
writePunctuation(writer, 21 /* SemicolonToken */);
writer.writeLine();
}
for (var i = 0; i < resolved.properties.length; i++) {
var p = resolved.properties[i];
var t = getTypeOfSymbol(p);
if (p.flags & (16 /* Function */ | 8192 /* Method */) && !getPropertiesOfObjectType(t).length) {
var signatures = getSignaturesOfType(t, 0 /* Call */);
for (var j = 0; j < signatures.length; j++) {
buildSymbolDisplay(p, writer);
if (isOptionalProperty(p)) {
writePunctuation(writer, 49 /* QuestionToken */);
}
buildSignatureDisplay(signatures[j], writer, enclosingDeclaration, globalFlagsToPass, typeStack);
writePunctuation(writer, 21 /* SemicolonToken */);
writer.writeLine();
}
}
else {
buildSymbolDisplay(p, writer);
if (isOptionalProperty(p)) {
writePunctuation(writer, 49 /* QuestionToken */);
}
writePunctuation(writer, 50 /* ColonToken */);
writeSpace(writer);
writeType(t, 0 /* None */);
writePunctuation(writer, 21 /* SemicolonToken */);
writer.writeLine();
}
}
writer.decreaseIndent();
writePunctuation(writer, 14 /* CloseBraceToken */);
}
}
function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) {
var targetSymbol = getTargetSymbol(symbol);
if (targetSymbol.flags & 32 /* Class */ || targetSymbol.flags & 64 /* Interface */) {
buildDisplayForTypeParametersAndDelimiters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags);
}
}
function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, typeStack) {
appendSymbolNameOnly(tp.symbol, writer);
var constraint = getConstraintOfTypeParameter(tp);
if (constraint) {
writeSpace(writer);
writeKeyword(writer, 77 /* ExtendsKeyword */);
writeSpace(writer);
buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, typeStack);
}
}
function buildParameterDisplay(p, writer, enclosingDeclaration, flags, typeStack) {
if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) {
writePunctuation(writer, 20 /* DotDotDotToken */);
}
appendSymbolNameOnly(p, writer);
if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) {
writePunctuation(writer, 49 /* QuestionToken */);
}
writePunctuation(writer, 50 /* ColonToken */);
writeSpace(writer);
buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack);
}
function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, typeStack) {
if (typeParameters && typeParameters.length) {
writePunctuation(writer, 23 /* LessThanToken */);
for (var i = 0; i < typeParameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 22 /* CommaToken */);
writeSpace(writer);
}
buildTypeParameterDisplay(typeParameters[i], writer, enclosingDeclaration, flags, typeStack);
}
writePunctuation(writer, 24 /* GreaterThanToken */);
}
}
function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) {
if (typeParameters && typeParameters.length) {
writePunctuation(writer, 23 /* LessThanToken */);
for (var i = 0; i < typeParameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 22 /* CommaToken */);
writeSpace(writer);
}
buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0 /* None */);
}
writePunctuation(writer, 24 /* GreaterThanToken */);
}
}
function buildDisplayForParametersAndDelimiters(parameters, writer, enclosingDeclaration, flags, typeStack) {
writePunctuation(writer, 15 /* OpenParenToken */);
for (var i = 0; i < parameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 22 /* CommaToken */);
writeSpace(writer);
}
buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, typeStack);
}
writePunctuation(writer, 16 /* CloseParenToken */);
}
function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
if (flags & 8 /* WriteArrowStyleSignature */) {
writeSpace(writer);
writePunctuation(writer, 31 /* EqualsGreaterThanToken */);
}
else {
writePunctuation(writer, 50 /* ColonToken */);
}
writeSpace(writer);
buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack);
}
function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
if (signature.target && (flags & 32 /* WriteTypeArgumentsOfSignature */)) {
buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration);
}
else {
buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, typeStack);
}
buildDisplayForParametersAndDelimiters(signature.parameters, writer, enclosingDeclaration, flags, typeStack);
buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack);
}
return _displayBuilder || (_displayBuilder = {
symbolToString: symbolToString,
typeToString: typeToString,
buildSymbolDisplay: buildSymbolDisplay,
buildTypeDisplay: buildTypeDisplay,
buildTypeParameterDisplay: buildTypeParameterDisplay,
buildParameterDisplay: buildParameterDisplay,
buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters,
buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters,
buildDisplayForTypeArgumentsAndDelimiters: buildDisplayForTypeArgumentsAndDelimiters,
buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol,
buildSignatureDisplay: buildSignatureDisplay,
buildReturnTypeDisplay: buildReturnTypeDisplay
});
}
function isDeclarationVisible(node) {
function getContainingExternalModule(node) {
for (; node; node = node.parent) {
if (node.kind === 188 /* ModuleDeclaration */) {
if (node.name.kind === 7 /* StringLiteral */) {
return node;
}
}
else if (node.kind === 193 /* SourceFile */) {
return ts.isExternalModule(node) ? node : undefined;
}
}
ts.Debug.fail("getContainingModule cant reach here");
}
function isUsedInExportAssignment(node) {
var externalModule = getContainingExternalModule(node);
if (externalModule) {
var externalModuleSymbol = getSymbolOfNode(externalModule);
var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol);
var resolvedExportSymbol;
var symbolOfNode = getSymbolOfNode(node);
if (isSymbolUsedInExportAssignment(symbolOfNode)) {
return true;
}
if (symbolOfNode.flags & 33554432 /* Import */) {
return isSymbolUsedInExportAssignment(resolveImport(symbolOfNode));
}
}
function isSymbolUsedInExportAssignment(symbol) {
if (exportAssignmentSymbol === symbol) {
return true;
}
if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 33554432 /* Import */)) {
resolvedExportSymbol = resolvedExportSymbol || resolveImport(exportAssignmentSymbol);
if (resolvedExportSymbol === symbol) {
return true;
}
return ts.forEach(resolvedExportSymbol.declarations, function (declaration) {
while (declaration) {
if (declaration === node) {
return true;
}
declaration = declaration.parent;
}
});
}
}
}
function determineIfDeclarationIsVisible() {
switch (node.kind) {
case 181 /* VariableDeclaration */:
case 188 /* ModuleDeclaration */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
case 182 /* FunctionDeclaration */:
case 187 /* EnumDeclaration */:
case 190 /* ImportDeclaration */:
var parent = node.kind === 181 /* VariableDeclaration */ ? node.parent.parent : node.parent;
if (!(node.flags & 1 /* Export */) && !(node.kind !== 190 /* ImportDeclaration */ && parent.kind !== 193 /* SourceFile */ && ts.isInAmbientContext(parent))) {
return isGlobalSourceFile(parent) || isUsedInExportAssignment(node);
}
return isDeclarationVisible(parent);
case 124 /* Property */:
case 125 /* Method */:
if (node.flags & (32 /* Private */ | 64 /* Protected */)) {
return false;
}
case 126 /* Constructor */:
case 130 /* ConstructSignature */:
case 129 /* CallSignature */:
case 131 /* IndexSignature */:
case 123 /* Parameter */:
case 189 /* ModuleBlock */:
return isDeclarationVisible(node.parent);
case 193 /* SourceFile */:
return true;
default:
ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind);
}
}
if (node) {
var links = getNodeLinks(node);
if (links.isVisible === undefined) {
links.isVisible = !!determineIfDeclarationIsVisible();
}
return links.isVisible;
}
}
function getTypeOfPrototypeProperty(prototype) {
var classType = getDeclaredTypeOfSymbol(prototype.parent);
return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType;
}
function getTypeOfVariableOrPropertyDeclaration(declaration) {
if (declaration.parent.kind === 166 /* ForInStatement */) {
return anyType;
}
if (declaration.type) {
return getTypeFromTypeNode(declaration.type);
}
if (declaration.kind === 123 /* Parameter */) {
var func = declaration.parent;
if (func.kind === 128 /* SetAccessor */) {
var getter = getDeclarationOfKind(declaration.parent.symbol, 127 /* GetAccessor */);
if (getter) {
return getReturnTypeOfSignature(getSignatureFromDeclaration(getter));
}
}
var type = getContextuallyTypedParameterType(declaration);
if (type) {
return type;
}
}
if (declaration.initializer) {
var type = checkAndMarkExpression(declaration.initializer);
if (declaration.kind !== 141 /* PropertyAssignment */) {
var unwidenedType = type;
type = getWidenedType(type);
if (type !== unwidenedType) {
checkImplicitAny(type);
}
}
return type;
}
var type = declaration.flags & 8 /* Rest */ ? createArrayType(anyType) : anyType;
checkImplicitAny(type);
return type;
function checkImplicitAny(type) {
if (!fullTypeCheck || !compilerOptions.noImplicitAny) {
return;
}
if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) {
return;
}
if (isPrivateWithinAmbient(declaration) || (declaration.kind === 123 /* Parameter */ && isPrivateWithinAmbient(declaration.parent))) {
return;
}
switch (declaration.kind) {
case 124 /* Property */:
var diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type;
break;
case 123 /* Parameter */:
var diagnostic = declaration.flags & 8 /* Rest */ ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type;
break;
default:
var diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type;
}
error(declaration, diagnostic, ts.declarationNameToString(declaration.name), typeToString(type));
}
}
function getTypeOfVariableOrParameterOrProperty(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
if (symbol.flags & 536870912 /* Prototype */) {
return links.type = getTypeOfPrototypeProperty(symbol);
}
var declaration = symbol.valueDeclaration;
if (declaration.kind === 178 /* CatchBlock */) {
return links.type = anyType;
}
links.type = resolvingType;
var type = getTypeOfVariableOrPropertyDeclaration(declaration);
if (links.type === resolvingType) {
links.type = type;
}
}
else if (links.type === resolvingType) {
links.type = anyType;
if (compilerOptions.noImplicitAny) {
var diagnostic = symbol.valueDeclaration.type ? ts.Diagnostics._0_implicitly_has_type_any_because_it_is_referenced_directly_or_indirectly_in_its_own_type_annotation : ts.Diagnostics._0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer;
error(symbol.valueDeclaration, diagnostic, symbolToString(symbol));
}
}
return links.type;
}
function getSetAccessorTypeAnnotationNode(accessor) {
return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type;
}
function getAnnotatedAccessorType(accessor) {
if (accessor) {
if (accessor.kind === 127 /* GetAccessor */) {
return accessor.type && getTypeFromTypeNode(accessor.type);
}
else {
var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor);
return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
}
}
return undefined;
}
function getTypeOfAccessors(symbol) {
var links = getSymbolLinks(symbol);
checkAndStoreTypeOfAccessors(symbol, links);
return links.type;
}
function checkAndStoreTypeOfAccessors(symbol, links) {
links = links || getSymbolLinks(symbol);
if (!links.type) {
links.type = resolvingType;
var getter = getDeclarationOfKind(symbol, 127 /* GetAccessor */);
var setter = getDeclarationOfKind(symbol, 128 /* SetAccessor */);
var type;
var getterReturnType = getAnnotatedAccessorType(getter);
if (getterReturnType) {
type = getterReturnType;
}
else {
var setterParameterType = getAnnotatedAccessorType(setter);
if (setterParameterType) {
type = setterParameterType;
}
else {
if (getter) {
type = getReturnTypeFromBody(getter);
}
else {
if (compilerOptions.noImplicitAny) {
error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbolToString(symbol));
}
type = anyType;
}
}
}
if (links.type === resolvingType) {
links.type = type;
}
}
else if (links.type === resolvingType) {
links.type = anyType;
if (compilerOptions.noImplicitAny) {
var getter = getDeclarationOfKind(symbol, 127 /* GetAccessor */);
error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
}
}
}
function getTypeOfFuncClassEnumModule(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = createObjectType(32768 /* Anonymous */, symbol);
}
return links.type;
}
function getTypeOfEnumMember(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol));
}
return links.type;
}
function getTypeOfImport(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = getTypeOfSymbol(resolveImport(symbol));
}
return links.type;
}
function getTypeOfInstantiatedSymbol(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper);
}
return links.type;
}
function getTypeOfSymbol(symbol) {
if (symbol.flags & 67108864 /* Instantiated */) {
return getTypeOfInstantiatedSymbol(symbol);
}
if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) {
return getTypeOfVariableOrParameterOrProperty(symbol);
}
if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) {
return getTypeOfFuncClassEnumModule(symbol);
}
if (symbol.flags & 8 /* EnumMember */) {
return getTypeOfEnumMember(symbol);
}
if (symbol.flags & 98304 /* Accessor */) {
return getTypeOfAccessors(symbol);
}
if (symbol.flags & 33554432 /* Import */) {
return getTypeOfImport(symbol);
}
return unknownType;
}
function getTargetType(type) {
return type.flags & 4096 /* Reference */ ? type.target : type;
}
function hasBaseType(type, checkBase) {
return check(type);
function check(type) {
var target = getTargetType(type);
return target === checkBase || ts.forEach(target.baseTypes, check);
}
}
function getTypeParametersOfClassOrInterface(symbol) {
var result;
ts.forEach(symbol.declarations, function (node) {
if (node.kind === 185 /* InterfaceDeclaration */ || node.kind === 184 /* ClassDeclaration */) {
var declaration = node;
if (declaration.typeParameters && declaration.typeParameters.length) {
ts.forEach(declaration.typeParameters, function (node) {
var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
if (!result) {
result = [tp];
}
else if (!ts.contains(result, tp)) {
result.push(tp);
}
});
}
}
});
return result;
}
function getDeclaredTypeOfClass(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = links.declaredType = createObjectType(1024 /* Class */, symbol);
var typeParameters = getTypeParametersOfClassOrInterface(symbol);
if (typeParameters) {
type.flags |= 4096 /* Reference */;
type.typeParameters = typeParameters;
type.instantiations = {};
type.instantiations[getTypeListId(type.typeParameters)] = type;
type.target = type;
type.typeArguments = type.typeParameters;
}
type.baseTypes = [];
var declaration = getDeclarationOfKind(symbol, 184 /* ClassDeclaration */);
if (declaration.baseType) {
var baseType = getTypeFromTypeReferenceNode(declaration.baseType);
if (baseType !== unknownType) {
if (getTargetType(baseType).flags & 1024 /* Class */) {
if (type !== baseType && !hasBaseType(baseType, type)) {
type.baseTypes.push(baseType);
}
else {
error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */));
}
}
else {
error(declaration.baseType, ts.Diagnostics.A_class_may_only_extend_another_class);
}
}
}
type.declaredProperties = getNamedMembers(symbol.members);
type.declaredCallSignatures = emptyArray;
type.declaredConstructSignatures = emptyArray;
type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */);
type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */);
}
return links.declaredType;
}
function getDeclaredTypeOfInterface(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = links.declaredType = createObjectType(2048 /* Interface */, symbol);
var typeParameters = getTypeParametersOfClassOrInterface(symbol);
if (typeParameters) {
type.flags |= 4096 /* Reference */;
type.typeParameters = typeParameters;
type.instantiations = {};
type.instantiations[getTypeListId(type.typeParameters)] = type;
type.target = type;
type.typeArguments = type.typeParameters;
}
type.baseTypes = [];
ts.forEach(symbol.declarations, function (declaration) {
if (declaration.kind === 185 /* InterfaceDeclaration */ && declaration.baseTypes) {
ts.forEach(declaration.baseTypes, function (node) {
var baseType = getTypeFromTypeReferenceNode(node);
if (baseType !== unknownType) {
if (getTargetType(baseType).flags & (1024 /* Class */ | 2048 /* Interface */)) {
if (type !== baseType && !hasBaseType(baseType, type)) {
type.baseTypes.push(baseType);
}
else {
error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */));
}
}
else {
error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface);
}
}
});
}
});
type.declaredProperties = getNamedMembers(symbol.members);
type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]);
type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]);
type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */);
type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */);
}
return links.declaredType;
}
function getDeclaredTypeOfTypeAlias(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
links.declaredType = resolvingType;
var declaration = getDeclarationOfKind(symbol, 186 /* TypeAliasDeclaration */);
var type = getTypeFromTypeNode(declaration.type);
if (links.declaredType === resolvingType) {
links.declaredType = type;
}
}
else if (links.declaredType === resolvingType) {
links.declaredType = unknownType;
var declaration = getDeclarationOfKind(symbol, 186 /* TypeAliasDeclaration */);
error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
}
return links.declaredType;
}
function getDeclaredTypeOfEnum(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = createType(128 /* Enum */);
type.symbol = symbol;
links.declaredType = type;
}
return links.declaredType;
}
function getDeclaredTypeOfTypeParameter(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = createType(512 /* TypeParameter */);
type.symbol = symbol;
if (!getDeclarationOfKind(symbol, 122 /* TypeParameter */).constraint) {
type.constraint = noConstraintType;
}
links.declaredType = type;
}
return links.declaredType;
}
function getDeclaredTypeOfImport(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
links.declaredType = getDeclaredTypeOfSymbol(resolveImport(symbol));
}
return links.declaredType;
}
function getDeclaredTypeOfSymbol(symbol) {
ts.Debug.assert((symbol.flags & 67108864 /* Instantiated */) === 0);
if (symbol.flags & 32 /* Class */) {
return getDeclaredTypeOfClass(symbol);
}
if (symbol.flags & 64 /* Interface */) {
return getDeclaredTypeOfInterface(symbol);
}
if (symbol.flags & 2097152 /* TypeAlias */) {
return getDeclaredTypeOfTypeAlias(symbol);
}
if (symbol.flags & 384 /* Enum */) {
return getDeclaredTypeOfEnum(symbol);
}
if (symbol.flags & 1048576 /* TypeParameter */) {
return getDeclaredTypeOfTypeParameter(symbol);
}
if (symbol.flags & 33554432 /* Import */) {
return getDeclaredTypeOfImport(symbol);
}
return unknownType;
}
function createSymbolTable(symbols) {
var result = {};
for (var i = 0; i < symbols.length; i++) {
var symbol = symbols[i];
result[symbol.name] = symbol;
}
return result;
}
function createInstantiatedSymbolTable(symbols, mapper) {
var result = {};
for (var i = 0; i < symbols.length; i++) {
var symbol = symbols[i];
result[symbol.name] = instantiateSymbol(symbol, mapper);
}
return result;
}
function addInheritedMembers(symbols, baseSymbols) {
for (var i = 0; i < baseSymbols.length; i++) {
var s = baseSymbols[i];
if (!ts.hasProperty(symbols, s.name)) {
symbols[s.name] = s;
}
}
}
function addInheritedSignatures(signatures, baseSignatures) {
if (baseSignatures) {
for (var i = 0; i < baseSignatures.length; i++) {
signatures.push(baseSignatures[i]);
}
}
}
function resolveClassOrInterfaceMembers(type) {
var members = type.symbol.members;
var callSignatures = type.declaredCallSignatures;
var constructSignatures = type.declaredConstructSignatures;
var stringIndexType = type.declaredStringIndexType;
var numberIndexType = type.declaredNumberIndexType;
if (type.baseTypes.length) {
members = createSymbolTable(type.declaredProperties);
ts.forEach(type.baseTypes, function (baseType) {
addInheritedMembers(members, getPropertiesOfObjectType(baseType));
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0 /* Call */));
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1 /* Construct */));
stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0 /* String */);
numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1 /* Number */);
});
}
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function resolveTypeReferenceMembers(type) {
var target = type.target;
var mapper = createTypeMapper(target.typeParameters, type.typeArguments);
var members = createInstantiatedSymbolTable(target.declaredProperties, mapper);
var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature);
var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature);
var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined;
var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined;
ts.forEach(target.baseTypes, function (baseType) {
var instantiatedBaseType = instantiateType(baseType, mapper);
addInheritedMembers(members, getPropertiesOfObjectType(instantiatedBaseType));
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */));
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */));
stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0 /* String */);
numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1 /* Number */);
});
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) {
var sig = new Signature(checker);
sig.declaration = declaration;
sig.typeParameters = typeParameters;
sig.parameters = parameters;
sig.resolvedReturnType = resolvedReturnType;
sig.minArgumentCount = minArgumentCount;
sig.hasRestParameter = hasRestParameter;
sig.hasStringLiterals = hasStringLiterals;
return sig;
}
function cloneSignature(sig) {
return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals);
}
function getDefaultConstructSignatures(classType) {
if (classType.baseTypes.length) {
var baseType = classType.baseTypes[0];
var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1 /* Construct */);
return ts.map(baseSignatures, function (baseSignature) {
var signature = baseType.flags & 4096 /* Reference */ ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature);
signature.typeParameters = classType.typeParameters;
signature.resolvedReturnType = classType;
return signature;
});
}
return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)];
}
function createTupleTypeMemberSymbols(memberTypes) {
var members = {};
for (var i = 0; i < memberTypes.length; i++) {
var symbol = createSymbol(4 /* Property */ | 268435456 /* Transient */, "" + i);
symbol.type = memberTypes[i];
members[i] = symbol;
}
return members;
}
function resolveTupleTypeMembers(type) {
var arrayType = resolveObjectOrUnionTypeMembers(createArrayType(getUnionType(type.elementTypes)));
var members = createTupleTypeMemberSymbols(type.elementTypes);
addInheritedMembers(members, arrayType.properties);
setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
}
function signatureListsIdentical(s, t) {
if (s.length !== t.length) {
return false;
}
for (var i = 0; i < s.length; i++) {
if (!compareSignatures(s[i], t[i], false, compareTypes)) {
return false;
}
}
return true;
}
function getUnionSignatures(types, kind) {
var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); });
var signatures = signatureLists[0];
for (var i = 0; i < signatures.length; i++) {
if (signatures[i].typeParameters) {
return emptyArray;
}
}
for (var i = 1; i < signatureLists.length; i++) {
if (!signatureListsIdentical(signatures, signatureLists[i])) {
return emptyArray;
}
}
var result = ts.map(signatures, cloneSignature);
for (var i = 0; i < result.length; i++) {
var s = result[i];
s.resolvedReturnType = undefined;
s.unionSignatures = ts.map(signatureLists, function (signatures) { return signatures[i]; });
}
return result;
}
function getUnionIndexType(types, kind) {
var indexTypes = [];
for (var i = 0; i < types.length; i++) {
var indexType = getIndexTypeOfType(types[i], kind);
if (!indexType) {
return undefined;
}
indexTypes.push(indexType);
}
return getUnionType(indexTypes);
}
function resolveUnionTypeMembers(type) {
var callSignatures = getUnionSignatures(type.types, 0 /* Call */);
var constructSignatures = getUnionSignatures(type.types, 1 /* Construct */);
var stringIndexType = getUnionIndexType(type.types, 0 /* String */);
var numberIndexType = getUnionIndexType(type.types, 1 /* Number */);
setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function resolveAnonymousTypeMembers(type) {
var symbol = type.symbol;
if (symbol.flags & 2048 /* TypeLiteral */) {
var members = symbol.members;
var callSignatures = getSignaturesOfSymbol(members["__call"]);
var constructSignatures = getSignaturesOfSymbol(members["__new"]);
var stringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */);
var numberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */);
}
else {
var members = emptySymbols;
var callSignatures = emptyArray;
var constructSignatures = emptyArray;
if (symbol.flags & 1952 /* HasExports */) {
members = symbol.exports;
}
if (symbol.flags & (16 /* Function */ | 8192 /* Method */)) {
callSignatures = getSignaturesOfSymbol(symbol);
}
if (symbol.flags & 32 /* Class */) {
var classType = getDeclaredTypeOfClass(symbol);
constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]);
if (!constructSignatures.length) {
constructSignatures = getDefaultConstructSignatures(classType);
}
if (classType.baseTypes.length) {
members = createSymbolTable(getNamedMembers(members));
addInheritedMembers(members, getPropertiesOfObjectType(getTypeOfSymbol(classType.baseTypes[0].symbol)));
}
}
var stringIndexType = undefined;
var numberIndexType = (symbol.flags & 384 /* Enum */) ? stringType : undefined;
}
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function resolveObjectOrUnionTypeMembers(type) {
if (!type.members) {
if (type.flags & (1024 /* Class */ | 2048 /* Interface */)) {
resolveClassOrInterfaceMembers(type);
}
else if (type.flags & 32768 /* Anonymous */) {
resolveAnonymousTypeMembers(type);
}
else if (type.flags & 8192 /* Tuple */) {
resolveTupleTypeMembers(type);
}
else if (type.flags & 16384 /* Union */) {
resolveUnionTypeMembers(type);
}
else {
resolveTypeReferenceMembers(type);
}
}
return type;
}
function getPropertiesOfObjectType(type) {
if (type.flags & 48128 /* ObjectType */) {
return resolveObjectOrUnionTypeMembers(type).properties;
}
return emptyArray;
}
function getPropertyOfObjectType(type, name) {
if (type.flags & 48128 /* ObjectType */) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (ts.hasProperty(resolved.members, name)) {
var symbol = resolved.members[name];
if (symbolIsValue(symbol)) {
return symbol;
}
}
}
}
function getPropertiesOfUnionType(type) {
var result = [];
ts.forEach(getPropertiesOfType(type.types[0]), function (prop) {
var unionProp = getPropertyOfUnionType(type, prop.name);
if (unionProp) {
result.push(unionProp);
}
});
return result;
}
function getPropertiesOfType(type) {
if (type.flags & 16384 /* Union */) {
return getPropertiesOfUnionType(type);
}
return getPropertiesOfObjectType(getApparentType(type));
}
function getApparentType(type) {
if (type.flags & 512 /* TypeParameter */) {
do {
type = getConstraintOfTypeParameter(type);
} while (type && type.flags & 512 /* TypeParameter */);
if (!type) {
type = emptyObjectType;
}
}
if (type.flags & 258 /* StringLike */) {
type = globalStringType;
}
else if (type.flags & 132 /* NumberLike */) {
type = globalNumberType;
}
else if (type.flags & 8 /* Boolean */) {
type = globalBooleanType;
}
return type;
}
function createUnionProperty(unionType, name) {
var types = unionType.types;
var props;
for (var i = 0; i < types.length; i++) {
var type = getApparentType(types[i]);
if (type !== unknownType) {
var prop = getPropertyOfType(type, name);
if (!prop) {
return undefined;
}
if (!props) {
props = [prop];
}
else {
props.push(prop);
}
}
}
var propTypes = [];
var declarations = [];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (prop.declarations) {
declarations.push.apply(declarations, prop.declarations);
}
propTypes.push(getTypeOfSymbol(prop));
}
var result = createSymbol(4 /* Property */ | 268435456 /* Transient */ | 1073741824 /* UnionProperty */, name);
result.unionType = unionType;
result.declarations = declarations;
result.type = getUnionType(propTypes);
return result;
}
function getPropertyOfUnionType(type, name) {
var properties = type.resolvedProperties || (type.resolvedProperties = {});
if (ts.hasProperty(properties, name)) {
return properties[name];
}
var property = createUnionProperty(type, name);
if (property) {
properties[name] = property;
}
return property;
}
function getPropertyOfType(type, name) {
if (type.flags & 16384 /* Union */) {
return getPropertyOfUnionType(type, name);
}
if (!(type.flags & 48128 /* ObjectType */)) {
type = getApparentType(type);
if (!(type.flags & 48128 /* ObjectType */)) {
return undefined;
}
}
var resolved = resolveObjectOrUnionTypeMembers(type);
if (ts.hasProperty(resolved.members, name)) {
var symbol = resolved.members[name];
if (symbolIsValue(symbol)) {
return symbol;
}
}
if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) {
var symbol = getPropertyOfObjectType(globalFunctionType, name);
if (symbol)
return symbol;
}
return getPropertyOfObjectType(globalObjectType, name);
}
function getSignaturesOfObjectOrUnionType(type, kind) {
if (type.flags & (48128 /* ObjectType */ | 16384 /* Union */)) {
var resolved = resolveObjectOrUnionTypeMembers(type);
return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures;
}
return emptyArray;
}
function getSignaturesOfType(type, kind) {
return getSignaturesOfObjectOrUnionType(getApparentType(type), kind);
}
function getIndexTypeOfObjectOrUnionType(type, kind) {
if (type.flags & (48128 /* ObjectType */ | 16384 /* Union */)) {
var resolved = resolveObjectOrUnionTypeMembers(type);
return kind === 0 /* String */ ? resolved.stringIndexType : resolved.numberIndexType;
}
}
function getIndexTypeOfType(type, kind) {
return getIndexTypeOfObjectOrUnionType(getApparentType(type), kind);
}
function getTypeParametersFromDeclaration(typeParameterDeclarations) {
var result = [];
ts.forEach(typeParameterDeclarations, function (node) {
var tp = getDeclaredTypeOfTypeParameter(node.symbol);
if (!ts.contains(result, tp)) {
result.push(tp);
}
});
return result;
}
function getSignatureFromDeclaration(declaration) {
var links = getNodeLinks(declaration);
if (!links.resolvedSignature) {
var classType = declaration.kind === 126 /* Constructor */ ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined;
var typeParameters = classType ? classType.typeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined;
var parameters = [];
var hasStringLiterals = false;
var minArgumentCount = -1;
for (var i = 0, n = declaration.parameters.length; i < n; i++) {
var param = declaration.parameters[i];
parameters.push(param.symbol);
if (param.type && param.type.kind === 7 /* StringLiteral */) {
hasStringLiterals = true;
}
if (minArgumentCount < 0) {
if (param.initializer || param.flags & (4 /* QuestionMark */ | 8 /* Rest */)) {
minArgumentCount = i;
}
}
}
if (minArgumentCount < 0) {
minArgumentCount = declaration.parameters.length;
}
var returnType;
if (classType) {
returnType = classType;
}
else if (declaration.type) {
returnType = getTypeFromTypeNode(declaration.type);
}
else {
if (declaration.kind === 127 /* GetAccessor */) {
var setter = getDeclarationOfKind(declaration.symbol, 128 /* SetAccessor */);
returnType = getAnnotatedAccessorType(setter);
}
if (!returnType && !declaration.body) {
returnType = anyType;
}
}
links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(declaration), hasStringLiterals);
}
return links.resolvedSignature;
}
function getSignaturesOfSymbol(symbol) {
if (!symbol)
return emptyArray;
var result = [];
for (var i = 0, len = symbol.declarations.length; i < len; i++) {
var node = symbol.declarations[i];
switch (node.kind) {
case 182 /* FunctionDeclaration */:
case 125 /* Method */:
case 126 /* Constructor */:
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
case 131 /* IndexSignature */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
if (i > 0 && node.body) {
var previous = symbol.declarations[i - 1];
if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) {
break;
}
}
result.push(getSignatureFromDeclaration(node));
}
}
return result;
}
function getReturnTypeOfSignature(signature) {
if (!signature.resolvedReturnType) {
signature.resolvedReturnType = resolvingType;
if (signature.target) {
var type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper);
}
else if (signature.unionSignatures) {
var type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature));
}
else {
var type = getReturnTypeFromBody(signature.declaration);
}
if (signature.resolvedReturnType === resolvingType) {
signature.resolvedReturnType = type;
}
}
else if (signature.resolvedReturnType === resolvingType) {
signature.resolvedReturnType = anyType;
if (compilerOptions.noImplicitAny) {
var declaration = signature.declaration;
if (declaration.name) {
error(declaration.name, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, ts.declarationNameToString(declaration.name));
}
else {
error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions);
}
}
}
return signature.resolvedReturnType;
}
function getRestTypeOfSignature(signature) {
if (signature.hasRestParameter) {
var type = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
if (type.flags & 4096 /* Reference */ && type.target === globalArrayType) {
return type.typeArguments[0];
}
}
return anyType;
}
function getSignatureInstantiation(signature, typeArguments) {
return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true);
}
function getErasedSignature(signature) {
if (!signature.typeParameters)
return signature;
if (!signature.erasedSignatureCache) {
if (signature.target) {
signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper);
}
else {
signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true);
}
}
return signature.erasedSignatureCache;
}
function getOrCreateTypeFromSignature(signature) {
if (!signature.isolatedSignatureType) {
var isConstructor = signature.declaration.kind === 126 /* Constructor */ || signature.declaration.kind === 130 /* ConstructSignature */;
var type = createObjectType(32768 /* Anonymous */ | 65536 /* FromSignature */);
type.members = emptySymbols;
type.properties = emptyArray;
type.callSignatures = !isConstructor ? [signature] : emptyArray;
type.constructSignatures = isConstructor ? [signature] : emptyArray;
signature.isolatedSignatureType = type;
}
return signature.isolatedSignatureType;
}
function getIndexSymbol(symbol) {
return symbol.members["__index"];
}
function getIndexDeclarationOfSymbol(symbol, kind) {
var syntaxKind = kind === 1 /* Number */ ? 116 /* NumberKeyword */ : 118 /* StringKeyword */;
var indexSymbol = getIndexSymbol(symbol);
if (indexSymbol) {
var len = indexSymbol.declarations.length;
for (var i = 0; i < len; i++) {
var node = indexSymbol.declarations[i];
if (node.parameters.length === 1) {
var parameter = node.parameters[0];
if (parameter && parameter.type && parameter.type.kind === syntaxKind) {
return node;
}
}
}
}
return undefined;
}
function getIndexTypeOfSymbol(symbol, kind) {
var declaration = getIndexDeclarationOfSymbol(symbol, kind);
return declaration ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType : undefined;
}
function getConstraintOfTypeParameter(type) {
if (!type.constraint) {
if (type.target) {
var targetConstraint = getConstraintOfTypeParameter(type.target);
type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType;
}
else {
type.constraint = getTypeFromTypeNode(getDeclarationOfKind(type.symbol, 122 /* TypeParameter */).constraint);
}
}
return type.constraint === noConstraintType ? undefined : type.constraint;
}
function getTypeListId(types) {
switch (types.length) {
case 1:
return "" + types[0].id;
case 2:
return types[0].id + "," + types[1].id;
default:
var result = "";
for (var i = 0; i < types.length; i++) {
if (i > 0)
result += ",";
result += types[i].id;
}
return result;
}
}
function createTypeReference(target, typeArguments) {
var id = getTypeListId(typeArguments);
var type = target.instantiations[id];
if (!type) {
type = target.instantiations[id] = createObjectType(4096 /* Reference */, target.symbol);
type.target = target;
type.typeArguments = typeArguments;
}
return type;
}
function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) {
var links = getNodeLinks(typeReferenceNode);
if (links.isIllegalTypeReferenceInConstraint !== undefined) {
return links.isIllegalTypeReferenceInConstraint;
}
var currentNode = typeReferenceNode;
while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) {
currentNode = currentNode.parent;
}
links.isIllegalTypeReferenceInConstraint = currentNode.kind === 122 /* TypeParameter */;
return links.isIllegalTypeReferenceInConstraint;
}
function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) {
var typeParameterSymbol;
function check(n) {
if (n.kind === 132 /* TypeReference */ && n.typeName.kind === 63 /* Identifier */) {
var links = getNodeLinks(n);
if (links.isIllegalTypeReferenceInConstraint === undefined) {
var symbol = resolveName(typeParameter, n.typeName.text, 3152352 /* Type */, undefined, undefined);
if (symbol && (symbol.flags & 1048576 /* TypeParameter */)) {
links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; });
}
}
if (links.isIllegalTypeReferenceInConstraint) {
error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list);
}
}
ts.forEachChild(n, check);
}
if (typeParameter.constraint) {
typeParameterSymbol = getSymbolOfNode(typeParameter);
check(typeParameter.constraint);
}
}
function getTypeFromTypeReferenceNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var symbol = resolveEntityName(node, node.typeName, 3152352 /* Type */);
if (symbol) {
var type;
if ((symbol.flags & 1048576 /* TypeParameter */) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) {
type = unknownType;
}
else {
type = getDeclaredTypeOfSymbol(symbol);
if (type.flags & (1024 /* Class */ | 2048 /* Interface */) && type.flags & 4096 /* Reference */) {
var typeParameters = type.typeParameters;
if (node.typeArguments && node.typeArguments.length === typeParameters.length) {
type = createTypeReference(type, ts.map(node.typeArguments, getTypeFromTypeNode));
}
else {
error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */), typeParameters.length);
type = undefined;
}
}
else {
if (node.typeArguments) {
error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
type = undefined;
}
}
}
}
links.resolvedType = type || unknownType;
}
return links.resolvedType;
}
function getTypeFromTypeQueryNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getWidenedType(checkExpression(node.exprName));
}
return links.resolvedType;
}
function getTypeOfGlobalSymbol(symbol, arity) {
function getTypeDeclaration(symbol) {
var declarations = symbol.declarations;
for (var i = 0; i < declarations.length; i++) {
var declaration = declarations[i];
switch (declaration.kind) {
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
return declaration;
}
}
}
if (!symbol) {
return emptyObjectType;
}
var type = getDeclaredTypeOfSymbol(symbol);
if (!(type.flags & 48128 /* ObjectType */)) {
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name);
return emptyObjectType;
}
if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) {
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity);
return emptyObjectType;
}
return type;
}
function getGlobalSymbol(name) {
return resolveName(undefined, name, 3152352 /* Type */, ts.Diagnostics.Cannot_find_global_type_0, name);
}
function getGlobalType(name) {
return getTypeOfGlobalSymbol(getGlobalSymbol(name), 0);
}
function createArrayType(elementType) {
var arrayType = globalArrayType || getDeclaredTypeOfSymbol(globalArraySymbol);
return arrayType !== emptyObjectType ? createTypeReference(arrayType, [elementType]) : emptyObjectType;
}
function getTypeFromArrayTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType));
}
return links.resolvedType;
}
function createTupleType(elementTypes) {
var id = getTypeListId(elementTypes);
var type = tupleTypes[id];
if (!type) {
type = tupleTypes[id] = createObjectType(8192 /* Tuple */);
type.elementTypes = elementTypes;
}
return type;
}
function getTypeFromTupleTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode));
}
return links.resolvedType;
}
function addTypeToSortedSet(sortedSet, type) {
if (type.flags & 16384 /* Union */) {
addTypesToSortedSet(sortedSet, type.types);
}
else {
var i = 0;
var id = type.id;
while (i < sortedSet.length && sortedSet[i].id < id) {
i++;
}
if (i === sortedSet.length || sortedSet[i].id !== id) {
sortedSet.splice(i, 0, type);
}
}
}
function addTypesToSortedSet(sortedTypes, types) {
for (var i = 0, len = types.length; i < len; i++) {
addTypeToSortedSet(sortedTypes, types[i]);
}
}
function isSubtypeOfAny(candidate, types) {
for (var i = 0, len = types.length; i < len; i++) {
if (candidate !== types[i] && isTypeSubtypeOf(candidate, types[i])) {
return true;
}
}
return false;
}
function removeSubtypes(types) {
var i = types.length;
while (i > 0) {
i--;
if (isSubtypeOfAny(types[i], types)) {
types.splice(i, 1);
}
}
}
function containsAnyType(types) {
for (var i = 0; i < types.length; i++) {
if (types[i].flags & 1 /* Any */) {
return true;
}
}
return false;
}
function removeAllButLast(types, typeToRemove) {
var i = types.length;
while (i > 0 && types.length > 1) {
i--;
if (types[i] === typeToRemove) {
types.splice(i, 1);
}
}
}
function getUnionType(types, noSubtypeReduction) {
if (types.length === 0) {
return emptyObjectType;
}
var sortedTypes = [];
addTypesToSortedSet(sortedTypes, types);
if (noSubtypeReduction) {
if (containsAnyType(sortedTypes)) {
return anyType;
}
removeAllButLast(sortedTypes, undefinedType);
removeAllButLast(sortedTypes, nullType);
}
else {
removeSubtypes(sortedTypes);
}
if (sortedTypes.length === 1) {
return sortedTypes[0];
}
var id = getTypeListId(sortedTypes);
var type = unionTypes[id];
if (!type) {
type = unionTypes[id] = createObjectType(16384 /* Union */);
type.types = sortedTypes;
}
return type;
}
function getTypeFromUnionTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true);
}
return links.resolvedType;
}
function getTypeFromTypeLiteralNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createObjectType(32768 /* Anonymous */, node.symbol);
}
return links.resolvedType;
}
function getStringLiteralType(node) {
if (ts.hasProperty(stringLiteralTypes, node.text))
return stringLiteralTypes[node.text];
var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */);
type.text = ts.getTextOfNode(node);
return type;
}
function getTypeFromStringLiteral(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getStringLiteralType(node);
}
return links.resolvedType;
}
function getTypeFromTypeNode(node) {
switch (node.kind) {
case 109 /* AnyKeyword */:
return anyType;
case 118 /* StringKeyword */:
return stringType;
case 116 /* NumberKeyword */:
return numberType;
case 110 /* BooleanKeyword */:
return booleanType;
case 97 /* VoidKeyword */:
return voidType;
case 7 /* StringLiteral */:
return getTypeFromStringLiteral(node);
case 132 /* TypeReference */:
return getTypeFromTypeReferenceNode(node);
case 133 /* TypeQuery */:
return getTypeFromTypeQueryNode(node);
case 135 /* ArrayType */:
return getTypeFromArrayTypeNode(node);
case 136 /* TupleType */:
return getTypeFromTupleTypeNode(node);
case 137 /* UnionType */:
return getTypeFromUnionTypeNode(node);
case 138 /* ParenType */:
return getTypeFromTypeNode(node.type);
case 134 /* TypeLiteral */:
return getTypeFromTypeLiteralNode(node);
case 63 /* Identifier */:
case 121 /* QualifiedName */:
var symbol = getSymbolInfo(node);
return symbol && getDeclaredTypeOfSymbol(symbol);
default:
return unknownType;
}
}
function instantiateList(items, mapper, instantiator) {
if (items && items.length) {
var result = [];
for (var i = 0; i < items.length; i++) {
result.push(instantiator(items[i], mapper));
}
return result;
}
return items;
}
function createUnaryTypeMapper(source, target) {
return function (t) { return t === source ? target : t; };
}
function createBinaryTypeMapper(source1, target1, source2, target2) {
return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; };
}
function createTypeMapper(sources, targets) {
switch (sources.length) {
case 1: return createUnaryTypeMapper(sources[0], targets[0]);
case 2: return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]);
}
return function (t) {
for (var i = 0; i < sources.length; i++) {
if (t === sources[i])
return targets[i];
}
return t;
};
}
function createUnaryTypeEraser(source) {
return function (t) { return t === source ? anyType : t; };
}
function createBinaryTypeEraser(source1, source2) {
return function (t) { return t === source1 || t === source2 ? anyType : t; };
}
function createTypeEraser(sources) {
switch (sources.length) {
case 1: return createUnaryTypeEraser(sources[0]);
case 2: return createBinaryTypeEraser(sources[0], sources[1]);
}
return function (t) {
for (var i = 0; i < sources.length; i++) {
if (t === sources[i])
return anyType;
}
return t;
};
}
function createInferenceMapper(context) {
return function (t) {
for (var i = 0; i < context.typeParameters.length; i++) {
if (t === context.typeParameters[i]) {
return getInferredType(context, i);
}
}
return t;
};
}
function identityMapper(type) {
return type;
}
function combineTypeMappers(mapper1, mapper2) {
return function (t) { return mapper2(mapper1(t)); };
}
function instantiateTypeParameter(typeParameter, mapper) {
var result = createType(512 /* TypeParameter */);
result.symbol = typeParameter.symbol;
if (typeParameter.constraint) {
result.constraint = instantiateType(typeParameter.constraint, mapper);
}
else {
result.target = typeParameter;
result.mapper = mapper;
}
return result;
}
function instantiateSignature(signature, mapper, eraseTypeParameters) {
if (signature.typeParameters && !eraseTypeParameters) {
var freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter);
mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper);
}
var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals);
result.target = signature;
result.mapper = mapper;
return result;
}
function instantiateSymbol(symbol, mapper) {
if (symbol.flags & 67108864 /* Instantiated */) {
var links = getSymbolLinks(symbol);
symbol = links.target;
mapper = combineTypeMappers(links.mapper, mapper);
}
var result = createSymbol(67108864 /* Instantiated */ | 268435456 /* Transient */ | symbol.flags, symbol.name);
result.declarations = symbol.declarations;
result.parent = symbol.parent;
result.target = symbol;
result.mapper = mapper;
if (symbol.valueDeclaration) {
result.valueDeclaration = symbol.valueDeclaration;
}
return result;
}
function instantiateAnonymousType(type, mapper) {
var result = createObjectType(32768 /* Anonymous */, type.symbol);
result.properties = instantiateList(getPropertiesOfObjectType(type), mapper, instantiateSymbol);
result.members = createSymbolTable(result.properties);
result.callSignatures = instantiateList(getSignaturesOfType(type, 0 /* Call */), mapper, instantiateSignature);
result.constructSignatures = instantiateList(getSignaturesOfType(type, 1 /* Construct */), mapper, instantiateSignature);
var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
if (stringIndexType)
result.stringIndexType = instantiateType(stringIndexType, mapper);
if (numberIndexType)
result.numberIndexType = instantiateType(numberIndexType, mapper);
return result;
}
function instantiateType(type, mapper) {
if (mapper !== identityMapper) {
if (type.flags & 512 /* TypeParameter */) {
return mapper(type);
}
if (type.flags & 32768 /* Anonymous */) {
return type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) ? instantiateAnonymousType(type, mapper) : type;
}
if (type.flags & 4096 /* Reference */) {
return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType));
}
if (type.flags & 8192 /* Tuple */) {
return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType));
}
if (type.flags & 16384 /* Union */) {
return getUnionType(instantiateList(type.types, mapper, instantiateType), true);
}
}
return type;
}
function isContextSensitiveExpression(node) {
switch (node.kind) {
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
return !node.typeParameters && !ts.forEach(node.parameters, function (p) { return p.type; });
case 140 /* ObjectLiteral */:
return ts.forEach(node.properties, function (p) { return p.kind === 141 /* PropertyAssignment */ && isContextSensitiveExpression(p.initializer); });
case 139 /* ArrayLiteral */:
return ts.forEach(node.elements, function (e) { return isContextSensitiveExpression(e); });
case 154 /* ConditionalExpression */:
return isContextSensitiveExpression(node.whenTrue) || isContextSensitiveExpression(node.whenFalse);
case 153 /* BinaryExpression */:
return node.operator === 48 /* BarBarToken */ && (isContextSensitiveExpression(node.left) || isContextSensitiveExpression(node.right));
}
return false;
}
function getTypeWithoutConstructors(type) {
if (type.flags & 48128 /* ObjectType */) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (resolved.constructSignatures.length) {
var result = createObjectType(32768 /* Anonymous */, type.symbol);
result.members = resolved.members;
result.properties = resolved.properties;
result.callSignatures = resolved.callSignatures;
result.constructSignatures = emptyArray;
type = result;
}
}
return type;
}
var subtypeRelation = {};
var assignableRelation = {};
var identityRelation = {};
function isTypeIdenticalTo(source, target) {
return checkTypeRelatedTo(source, target, identityRelation, undefined);
}
function compareTypes(source, target) {
return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 /* True */ : 0 /* False */;
}
function isTypeSubtypeOf(source, target) {
return checkTypeSubtypeOf(source, target, undefined);
}
function isTypeAssignableTo(source, target) {
return checkTypeAssignableTo(source, target, undefined);
}
function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) {
return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain);
}
function checkTypeAssignableTo(source, target, errorNode, headMessage) {
return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage);
}
function isSignatureAssignableTo(source, target) {
var sourceType = getOrCreateTypeFromSignature(source);
var targetType = getOrCreateTypeFromSignature(target);
return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined);
}
function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) {
var errorInfo;
var sourceStack;
var targetStack;
var expandingFlags;
var depth = 0;
var overflow = false;
ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking");
var result = isRelatedTo(source, target, errorNode !== undefined, headMessage);
if (overflow) {
error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target));
}
else if (errorInfo) {
if (containingMessageChain) {
errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo);
}
addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, program.getCompilerHost().getNewLine()));
}
return result !== 0 /* False */;
function reportError(message, arg0, arg1, arg2) {
errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2);
}
function isRelatedTo(source, target, reportErrors, headMessage) {
var result;
if (relation === identityRelation) {
if (source === target)
return -1 /* True */;
}
else {
if (source === target)
return -1 /* True */;
if (target.flags & 1 /* Any */)
return -1 /* True */;
if (source === undefinedType)
return -1 /* True */;
if (source === nullType && target !== undefinedType)
return -1 /* True */;
if (source.flags & 128 /* Enum */ && target === numberType)
return -1 /* True */;
if (source.flags & 256 /* StringLiteral */ && target === stringType)
return -1 /* True */;
if (relation === assignableRelation) {
if (source.flags & 1 /* Any */)
return -1 /* True */;
if (source === numberType && target.flags & 128 /* Enum */)
return -1 /* True */;
}
}
if (source.flags & 16384 /* Union */) {
if (result = unionTypeRelatedToType(source, target, reportErrors)) {
return result;
}
}
else if (target.flags & 16384 /* Union */) {
if (result = typeRelatedToUnionType(source, target, reportErrors)) {
return result;
}
}
else if (source.flags & 512 /* TypeParameter */ && target.flags & 512 /* TypeParameter */) {
if (result = typeParameterRelatedTo(source, target, reportErrors)) {
return result;
}
}
else {
var saveErrorInfo = errorInfo;
if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) {
if (result = typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) {
return result;
}
}
var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo;
var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source);
if (sourceOrApparentType.flags & 48128 /* ObjectType */ && target.flags & 48128 /* ObjectType */ && (result = objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors))) {
errorInfo = saveErrorInfo;
return result;
}
}
if (reportErrors) {
headMessage = headMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1;
reportError(headMessage, typeToString(source), typeToString(target));
}
return 0 /* False */;
}
function typeRelatedToUnionType(source, target, reportErrors) {
var targetTypes = target.types;
for (var i = 0, len = targetTypes.length; i < len; i++) {
var related = isRelatedTo(source, targetTypes[i], reportErrors && i === len - 1);
if (related) {
return related;
}
}
return 0 /* False */;
}
function unionTypeRelatedToType(source, target, reportErrors) {
var result = -1 /* True */;
var sourceTypes = source.types;
for (var i = 0, len = sourceTypes.length; i < len; i++) {
var related = isRelatedTo(sourceTypes[i], target, reportErrors);
if (!related) {
return 0 /* False */;
}
result &= related;
}
return result;
}
function typesRelatedTo(sources, targets, reportErrors) {
var result = -1 /* True */;
for (var i = 0, len = sources.length; i < len; i++) {
var related = isRelatedTo(sources[i], targets[i], reportErrors);
if (!related) {
return 0 /* False */;
}
result &= related;
}
return result;
}
function typeParameterRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
if (source.symbol.name !== target.symbol.name) {
return 0 /* False */;
}
if (source.constraint === target.constraint) {
return -1 /* True */;
}
if (source.constraint === noConstraintType || target.constraint === noConstraintType) {
return 0 /* False */;
}
return isRelatedTo(source.constraint, target.constraint, reportErrors);
}
else {
while (true) {
var constraint = getConstraintOfTypeParameter(source);
if (constraint === target)
return -1 /* True */;
if (!(constraint && constraint.flags & 512 /* TypeParameter */))
break;
source = constraint;
}
return 0 /* False */;
}
}
function objectTypeRelatedTo(source, target, reportErrors) {
if (overflow) {
return 0 /* False */;
}
var id = source.id + "," + target.id;
var related = relation[id];
if (related !== undefined) {
return related;
}
if (depth > 0) {
for (var i = 0; i < depth; i++) {
if (source === sourceStack[i] && target === targetStack[i]) {
return 1 /* Maybe */;
}
}
if (depth === 100) {
overflow = true;
return 0 /* False */;
}
}
else {
sourceStack = [];
targetStack = [];
expandingFlags = 0;
}
sourceStack[depth] = source;
targetStack[depth] = target;
depth++;
var saveExpandingFlags = expandingFlags;
if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack))
expandingFlags |= 1;
if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack))
expandingFlags |= 2;
if (expandingFlags === 3) {
var result = -1 /* True */;
}
else {
var result = propertiesRelatedTo(source, target, reportErrors);
if (result) {
result &= signaturesRelatedTo(source, target, 0 /* Call */, reportErrors);
if (result) {
result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportErrors);
if (result) {
result &= stringIndexTypesRelatedTo(source, target, reportErrors);
if (result) {
result &= numberIndexTypesRelatedTo(source, target, reportErrors);
}
}
}
}
}
expandingFlags = saveExpandingFlags;
depth--;
if (result !== 1 /* Maybe */) {
relation[id] = result;
}
return result;
}
function isDeeplyNestedGeneric(type, stack) {
if (type.flags & 4096 /* Reference */ && depth >= 10) {
var target = type.target;
var count = 0;
for (var i = 0; i < depth; i++) {
var t = stack[i];
if (t.flags & 4096 /* Reference */ && t.target === target) {
count++;
if (count >= 10)
return true;
}
}
}
return false;
}
function propertiesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return propertiesIdenticalTo(source, target);
}
var result = -1 /* True */;
var properties = getPropertiesOfObjectType(target);
for (var i = 0; i < properties.length; i++) {
var targetProp = properties[i];
var sourceProp = getPropertyOfType(source, targetProp.name);
if (sourceProp !== targetProp) {
if (!sourceProp) {
if (relation === subtypeRelation || !isOptionalProperty(targetProp)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source));
}
return 0 /* False */;
}
}
else if (!(targetProp.flags & 536870912 /* Prototype */)) {
var sourceFlags = getDeclarationFlagsFromSymbol(sourceProp);
var targetFlags = getDeclarationFlagsFromSymbol(targetProp);
if (sourceFlags & 32 /* Private */ || targetFlags & 32 /* Private */) {
if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
if (reportErrors) {
if (sourceFlags & 32 /* Private */ && targetFlags & 32 /* Private */) {
reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp));
}
else {
reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourceFlags & 32 /* Private */ ? source : target), typeToString(sourceFlags & 32 /* Private */ ? target : source));
}
}
return 0 /* False */;
}
}
else if (targetFlags & 64 /* Protected */) {
var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32 /* Class */;
var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(sourceProp.parent) : undefined;
var targetClass = getDeclaredTypeOfSymbol(targetProp.parent);
if (!sourceClass || !hasBaseType(sourceClass, targetClass)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass));
}
return 0 /* False */;
}
}
else if (sourceFlags & 64 /* Protected */) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
}
return 0 /* False */;
}
var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
}
return 0 /* False */;
}
result &= related;
if (isOptionalProperty(sourceProp) && !isOptionalProperty(targetProp)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
}
return 0 /* False */;
}
}
}
}
return result;
}
function propertiesIdenticalTo(source, target) {
var sourceProperties = getPropertiesOfObjectType(source);
var targetProperties = getPropertiesOfObjectType(target);
if (sourceProperties.length !== targetProperties.length) {
return 0 /* False */;
}
var result = -1 /* True */;
for (var i = 0, len = sourceProperties.length; i < len; ++i) {
var sourceProp = sourceProperties[i];
var targetProp = getPropertyOfObjectType(target, sourceProp.name);
if (!targetProp) {
return 0 /* False */;
}
var related = compareProperties(sourceProp, targetProp, isRelatedTo);
if (!related) {
return 0 /* False */;
}
result &= related;
}
return result;
}
function signaturesRelatedTo(source, target, kind, reportErrors) {
if (relation === identityRelation) {
return signaturesIdenticalTo(source, target, kind);
}
if (target === anyFunctionType || source === anyFunctionType) {
return -1 /* True */;
}
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
var result = -1 /* True */;
var saveErrorInfo = errorInfo;
outer: for (var i = 0; i < targetSignatures.length; i++) {
var t = targetSignatures[i];
if (!t.hasStringLiterals || target.flags & 65536 /* FromSignature */) {
var localErrors = reportErrors;
for (var j = 0; j < sourceSignatures.length; j++) {
var s = sourceSignatures[j];
if (!s.hasStringLiterals || source.flags & 65536 /* FromSignature */) {
var related = signatureRelatedTo(s, t, localErrors);
if (related) {
result &= related;
errorInfo = saveErrorInfo;
continue outer;
}
localErrors = false;
}
}
return 0 /* False */;
}
}
return result;
}
function signatureRelatedTo(source, target, reportErrors) {
if (source === target) {
return -1 /* True */;
}
if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) {
return 0 /* False */;
}
var sourceMax = source.parameters.length;
var targetMax = target.parameters.length;
var checkCount;
if (source.hasRestParameter && target.hasRestParameter) {
checkCount = sourceMax > targetMax ? sourceMax : targetMax;
sourceMax--;
targetMax--;
}
else if (source.hasRestParameter) {
sourceMax--;
checkCount = targetMax;
}
else if (target.hasRestParameter) {
targetMax--;
checkCount = sourceMax;
}
else {
checkCount = sourceMax < targetMax ? sourceMax : targetMax;
}
source = getErasedSignature(source);
target = getErasedSignature(target);
var result = -1 /* True */;
for (var i = 0; i < checkCount; i++) {
var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
var saveErrorInfo = errorInfo;
var related = isRelatedTo(s, t, reportErrors);
if (!related) {
related = isRelatedTo(t, s, false);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name);
}
return 0 /* False */;
}
errorInfo = saveErrorInfo;
}
result &= related;
}
var t = getReturnTypeOfSignature(target);
if (t === voidType)
return result;
var s = getReturnTypeOfSignature(source);
return result & isRelatedTo(s, t, reportErrors);
}
function signaturesIdenticalTo(source, target, kind) {
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
if (sourceSignatures.length !== targetSignatures.length) {
return 0 /* False */;
}
var result = -1 /* True */;
for (var i = 0, len = sourceSignatures.length; i < len; ++i) {
var related = compareSignatures(sourceSignatures[i], targetSignatures[i], true, isRelatedTo);
if (!related) {
return 0 /* False */;
}
result &= related;
}
return result;
}
function stringIndexTypesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return indexTypesIdenticalTo(0 /* String */, source, target);
}
var targetType = getIndexTypeOfType(target, 0 /* String */);
if (targetType) {
var sourceType = getIndexTypeOfType(source, 0 /* String */);
if (!sourceType) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
}
return 0 /* False */;
}
var related = isRelatedTo(sourceType, targetType, reportErrors);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signatures_are_incompatible);
}
return 0 /* False */;
}
return related;
}
return -1 /* True */;
}
function numberIndexTypesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return indexTypesIdenticalTo(1 /* Number */, source, target);
}
var targetType = getIndexTypeOfType(target, 1 /* Number */);
if (targetType) {
var sourceStringType = getIndexTypeOfType(source, 0 /* String */);
var sourceNumberType = getIndexTypeOfType(source, 1 /* Number */);
if (!(sourceStringType || sourceNumberType)) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
}
return 0 /* False */;
}
if (sourceStringType && sourceNumberType) {
var related = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors);
}
else {
var related = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors);
}
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signatures_are_incompatible);
}
return 0 /* False */;
}
return related;
}
return -1 /* True */;
}
function indexTypesIdenticalTo(indexKind, source, target) {
var targetType = getIndexTypeOfType(target, indexKind);
var sourceType = getIndexTypeOfType(source, indexKind);
if (!sourceType && !targetType) {
return -1 /* True */;
}
if (sourceType && targetType) {
return isRelatedTo(sourceType, targetType);
}
return 0 /* False */;
}
}
function isPropertyIdenticalTo(sourceProp, targetProp) {
return compareProperties(sourceProp, targetProp, compareTypes) !== 0 /* False */;
}
function compareProperties(sourceProp, targetProp, compareTypes) {
if (sourceProp === targetProp) {
return -1 /* True */;
}
var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (32 /* Private */ | 64 /* Protected */);
var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (32 /* Private */ | 64 /* Protected */);
if (sourcePropAccessibility !== targetPropAccessibility) {
return 0 /* False */;
}
if (sourcePropAccessibility) {
if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) {
return 0 /* False */;
}
}
else {
if (isOptionalProperty(sourceProp) !== isOptionalProperty(targetProp)) {
return 0 /* False */;
}
}
return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
}
function compareSignatures(source, target, compareReturnTypes, compareTypes) {
if (source === target) {
return -1 /* True */;
}
if (source.parameters.length !== target.parameters.length || source.minArgumentCount !== target.minArgumentCount || source.hasRestParameter !== target.hasRestParameter) {
return 0 /* False */;
}
var result = -1 /* True */;
if (source.typeParameters && target.typeParameters) {
if (source.typeParameters.length !== target.typeParameters.length) {
return 0 /* False */;
}
for (var i = 0, len = source.typeParameters.length; i < len; ++i) {
var related = compareTypes(source.typeParameters[i], target.typeParameters[i]);
if (!related) {
return 0 /* False */;
}
result &= related;
}
}
else if (source.typeParameters || source.typeParameters) {
return 0 /* False */;
}
source = getErasedSignature(source);
target = getErasedSignature(target);
for (var i = 0, len = source.parameters.length; i < len; i++) {
var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]);
var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]);
var related = compareTypes(s, t);
if (!related) {
return 0 /* False */;
}
result &= related;
}
if (compareReturnTypes) {
result &= compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
}
return result;
}
function isSupertypeOfEach(candidate, types) {
for (var i = 0, len = types.length; i < len; i++) {
if (candidate !== types[i] && !isTypeSubtypeOf(types[i], candidate))
return false;
}
return true;
}
function getCommonSupertype(types) {
return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; });
}
function reportNoCommonSupertypeError(types, errorLocation, errorMessageChainHead) {
var bestSupertype;
var bestSupertypeDownfallType;
var bestSupertypeScore = 0;
for (var i = 0; i < types.length; i++) {
var score = 0;
var downfallType = undefined;
for (var j = 0; j < types.length; j++) {
if (isTypeSubtypeOf(types[j], types[i])) {
score++;
}
else if (!downfallType) {
downfallType = types[j];
}
}
if (score > bestSupertypeScore) {
bestSupertype = types[i];
bestSupertypeDownfallType = downfallType;
bestSupertypeScore = score;
}
if (bestSupertypeScore === types.length - 1) {
break;
}
}
checkTypeSubtypeOf(bestSupertypeDownfallType, bestSupertype, errorLocation, ts.Diagnostics.Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0, errorMessageChainHead);
}
function isTypeOfObjectLiteral(type) {
return (type.flags & 32768 /* Anonymous */) && type.symbol && (type.symbol.flags & 4096 /* ObjectLiteral */) ? true : false;
}
function isArrayType(type) {
return type.flags & 4096 /* Reference */ && type.target === globalArrayType;
}
function getInnermostTypeOfNestedArrayTypes(type) {
while (isArrayType(type)) {
type = type.typeArguments[0];
}
return type;
}
function getWidenedType(type, suppressNoImplicitAnyErrors) {
if (type.flags & (32 /* Undefined */ | 64 /* Null */)) {
return anyType;
}
if (type.flags & 16384 /* Union */) {
return getWidenedTypeOfUnion(type);
}
if (isTypeOfObjectLiteral(type)) {
return getWidenedTypeOfObjectLiteral(type);
}
if (isArrayType(type)) {
return getWidenedTypeOfArrayLiteral(type);
}
return type;
function getWidenedTypeOfUnion(type) {
return getUnionType(ts.map(type.types, function (t) { return getWidenedType(t, suppressNoImplicitAnyErrors); }));
}
function getWidenedTypeOfObjectLiteral(type) {
var properties = getPropertiesOfObjectType(type);
if (properties.length) {
var widenedTypes = [];
var propTypeWasWidened = false;
ts.forEach(properties, function (p) {
var propType = getTypeOfSymbol(p);
var widenedType = getWidenedType(propType);
if (propType !== widenedType) {
propTypeWasWidened = true;
if (!suppressNoImplicitAnyErrors && compilerOptions.noImplicitAny && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) {
error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(widenedType));
}
}
widenedTypes.push(widenedType);
});
if (propTypeWasWidened) {
var members = {};
var index = 0;
ts.forEach(properties, function (p) {
var symbol = createSymbol(4 /* Property */ | 268435456 /* Transient */ | p.flags, p.name);
symbol.declarations = p.declarations;
symbol.parent = p.parent;
symbol.type = widenedTypes[index++];
symbol.target = p;
if (p.valueDeclaration)
symbol.valueDeclaration = p.valueDeclaration;
members[symbol.name] = symbol;
});
var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
if (stringIndexType)
stringIndexType = getWidenedType(stringIndexType);
if (numberIndexType)
numberIndexType = getWidenedType(numberIndexType);
type = createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType);
}
}
return type;
}
function getWidenedTypeOfArrayLiteral(type) {
var elementType = type.typeArguments[0];
var widenedType = getWidenedType(elementType, suppressNoImplicitAnyErrors);
type = elementType !== widenedType ? createArrayType(widenedType) : type;
return type;
}
}
function forEachMatchingParameterType(source, target, callback) {
var sourceMax = source.parameters.length;
var targetMax = target.parameters.length;
var count;
if (source.hasRestParameter && target.hasRestParameter) {
count = sourceMax > targetMax ? sourceMax : targetMax;
sourceMax--;
targetMax--;
}
else if (source.hasRestParameter) {
sourceMax--;
count = targetMax;
}
else if (target.hasRestParameter) {
targetMax--;
count = sourceMax;
}
else {
count = sourceMax < targetMax ? sourceMax : targetMax;
}
for (var i = 0; i < count; i++) {
var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
callback(s, t);
}
}
function createInferenceContext(typeParameters, inferUnionTypes) {
var inferences = [];
for (var i = 0; i < typeParameters.length; i++) {
inferences.push({ primary: undefined, secondary: undefined });
}
return {
typeParameters: typeParameters,
inferUnionTypes: inferUnionTypes,
inferenceCount: 0,
inferences: inferences,
inferredTypes: new Array(typeParameters.length)
};
}
function inferTypes(context, source, target) {
var sourceStack;
var targetStack;
var depth = 0;
var inferiority = 0;
inferFromTypes(source, target);
function isInProcess(source, target) {
for (var i = 0; i < depth; i++) {
if (source === sourceStack[i] && target === targetStack[i])
return true;
}
return false;
}
function isWithinDepthLimit(type, stack) {
if (depth >= 5) {
var target = type.target;
var count = 0;
for (var i = 0; i < depth; i++) {
var t = stack[i];
if (t.flags & 4096 /* Reference */ && t.target === target)
count++;
}
return count < 5;
}
return true;
}
function inferFromTypes(source, target) {
if (target.flags & 512 /* TypeParameter */) {
var typeParameters = context.typeParameters;
for (var i = 0; i < typeParameters.length; i++) {
if (target === typeParameters[i]) {
var inferences = context.inferences[i];
var candidates = inferiority ? inferences.secondary || (inferences.secondary = []) : inferences.primary || (inferences.primary = []);
if (!ts.contains(candidates, source))
candidates.push(source);
break;
}
}
}
else if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) {
var sourceTypes = source.typeArguments;
var targetTypes = target.typeArguments;
for (var i = 0; i < sourceTypes.length; i++) {
inferFromTypes(sourceTypes[i], targetTypes[i]);
}
}
else if (target.flags & 16384 /* Union */) {
var targetTypes = target.types;
var typeParameterCount = 0;
var typeParameter;
for (var i = 0; i < targetTypes.length; i++) {
var t = targetTypes[i];
if (t.flags & 512 /* TypeParameter */ && ts.contains(context.typeParameters, t)) {
typeParameter = t;
typeParameterCount++;
}
else {
inferFromTypes(source, t);
}
}
if (typeParameterCount === 1) {
inferiority++;
inferFromTypes(source, typeParameter);
inferiority--;
}
}
else if (source.flags & 16384 /* Union */) {
var sourceTypes = source.types;
for (var i = 0; i < sourceTypes.length; i++) {
inferFromTypes(sourceTypes[i], target);
}
}
else if (source.flags & 48128 /* ObjectType */ && (target.flags & (4096 /* Reference */ | 8192 /* Tuple */) || (target.flags & 32768 /* Anonymous */) && target.symbol && target.symbol.flags & (8192 /* Method */ | 2048 /* TypeLiteral */))) {
if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) {
if (depth === 0) {
sourceStack = [];
targetStack = [];
}
sourceStack[depth] = source;
targetStack[depth] = target;
depth++;
inferFromProperties(source, target);
inferFromSignatures(source, target, 0 /* Call */);
inferFromSignatures(source, target, 1 /* Construct */);
inferFromIndexTypes(source, target, 0 /* String */, 0 /* String */);
inferFromIndexTypes(source, target, 1 /* Number */, 1 /* Number */);
inferFromIndexTypes(source, target, 0 /* String */, 1 /* Number */);
depth--;
}
}
}
function inferFromProperties(source, target) {
var properties = getPropertiesOfObjectType(target);
for (var i = 0; i < properties.length; i++) {
var targetProp = properties[i];
var sourceProp = getPropertyOfObjectType(source, targetProp.name);
if (sourceProp) {
inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
}
}
}
function inferFromSignatures(source, target, kind) {
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
var sourceLen = sourceSignatures.length;
var targetLen = targetSignatures.length;
var len = sourceLen < targetLen ? sourceLen : targetLen;
for (var i = 0; i < len; i++) {
inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i]));
}
}
function inferFromSignature(source, target) {
forEachMatchingParameterType(source, target, inferFromTypes);
inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
}
function inferFromIndexTypes(source, target, sourceKind, targetKind) {
var targetIndexType = getIndexTypeOfType(target, targetKind);
if (targetIndexType) {
var sourceIndexType = getIndexTypeOfType(source, sourceKind);
if (sourceIndexType) {
inferFromTypes(sourceIndexType, targetIndexType);
}
}
}
}
function getInferenceCandidates(context, index) {
var inferences = context.inferences[index];
return inferences.primary || inferences.secondary || emptyArray;
}
function getInferredType(context, index) {
var inferredType = context.inferredTypes[index];
if (!inferredType) {
var inferences = getInferenceCandidates(context, index);
if (inferences.length) {
var unionOrSuperType = context.inferUnionTypes ? getUnionType(inferences) : getCommonSupertype(inferences);
inferredType = unionOrSuperType ? getWidenedType(unionOrSuperType) : inferenceFailureType;
}
else {
inferredType = emptyObjectType;
}
if (inferredType !== inferenceFailureType) {
var constraint = getConstraintOfTypeParameter(context.typeParameters[index]);
inferredType = constraint && !isTypeAssignableTo(inferredType, constraint) ? constraint : inferredType;
}
context.inferredTypes[index] = inferredType;
}
return inferredType;
}
function getInferredTypes(context) {
for (var i = 0; i < context.inferredTypes.length; i++) {
getInferredType(context, i);
}
return context.inferredTypes;
}
function hasAncestor(node, kind) {
return ts.getAncestor(node, kind) !== undefined;
}
function getResolvedSymbol(node) {
var links = getNodeLinks(node);
if (!links.resolvedSymbol) {
links.resolvedSymbol = resolveName(node, node.text, 107455 /* Value */ | 4194304 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, node) || unknownSymbol;
}
return links.resolvedSymbol;
}
function isInTypeQuery(node) {
while (node) {
switch (node.kind) {
case 133 /* TypeQuery */:
return true;
case 63 /* Identifier */:
case 121 /* QualifiedName */:
node = node.parent;
continue;
default:
return false;
}
}
ts.Debug.fail("should not get here");
}
function subtractPrimitiveTypes(type, subtractMask) {
if (type.flags & 16384 /* Union */) {
var types = type.types;
if (ts.forEach(types, function (t) { return t.flags & subtractMask; })) {
return getUnionType(ts.filter(types, function (t) { return !(t.flags & subtractMask); }));
}
}
return type;
}
function isVariableAssignedWithin(symbol, node) {
var links = getNodeLinks(node);
if (links.assignmentChecks) {
var cachedResult = links.assignmentChecks[symbol.id];
if (cachedResult !== undefined) {
return cachedResult;
}
}
else {
links.assignmentChecks = {};
}
return links.assignmentChecks[symbol.id] = isAssignedIn(node);
function isAssignedInBinaryExpression(node) {
if (node.operator >= 51 /* FirstAssignment */ && node.operator <= 62 /* LastAssignment */) {
var n = node.left;
while (n.kind === 148 /* ParenExpression */) {
n = n.expression;
}
if (n.kind === 63 /* Identifier */ && getResolvedSymbol(n) === symbol) {
return true;
}
}
return ts.forEachChild(node, isAssignedIn);
}
function isAssignedInVariableDeclaration(node) {
if (getSymbolOfNode(node) === symbol && node.initializer) {
return true;
}
return ts.forEachChild(node, isAssignedIn);
}
function isAssignedIn(node) {
switch (node.kind) {
case 153 /* BinaryExpression */:
return isAssignedInBinaryExpression(node);
case 181 /* VariableDeclaration */:
return isAssignedInVariableDeclaration(node);
case 139 /* ArrayLiteral */:
case 140 /* ObjectLiteral */:
case 142 /* PropertyAccess */:
case 143 /* IndexedAccess */:
case 144 /* CallExpression */:
case 145 /* NewExpression */:
case 147 /* TypeAssertion */:
case 148 /* ParenExpression */:
case 151 /* PrefixOperator */:
case 152 /* PostfixOperator */:
case 154 /* ConditionalExpression */:
case 158 /* Block */:
case 159 /* VariableStatement */:
case 161 /* ExpressionStatement */:
case 162 /* IfStatement */:
case 163 /* DoStatement */:
case 164 /* WhileStatement */:
case 165 /* ForStatement */:
case 166 /* ForInStatement */:
case 169 /* ReturnStatement */:
case 170 /* WithStatement */:
case 171 /* SwitchStatement */:
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
case 174 /* LabeledStatement */:
case 175 /* ThrowStatement */:
case 176 /* TryStatement */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
return ts.forEachChild(node, isAssignedIn);
}
return false;
}
}
function getNarrowedTypeOfSymbol(symbol, node) {
var type = getTypeOfSymbol(symbol);
if (node && (symbol.flags & 3 /* Variable */ && type.flags & 65025 /* Structured */)) {
while (true) {
var child = node;
node = node.parent;
if (!node || node.kind === 183 /* FunctionBlock */ || node.kind === 189 /* ModuleBlock */) {
break;
}
var narrowedType = type;
switch (node.kind) {
case 162 /* IfStatement */:
if (child !== node.expression) {
narrowedType = narrowType(type, node.expression, child === node.thenStatement);
}
break;
case 154 /* ConditionalExpression */:
if (child !== node.condition) {
narrowedType = narrowType(type, node.condition, child === node.whenTrue);
}
break;
case 153 /* BinaryExpression */:
if (child === node.right) {
if (node.operator === 47 /* AmpersandAmpersandToken */) {
narrowedType = narrowType(type, node.left, true);
}
else if (node.operator === 48 /* BarBarToken */) {
narrowedType = narrowType(type, node.left, false);
}
}
break;
}
if (narrowedType !== type) {
if (isVariableAssignedWithin(symbol, node)) {
break;
}
type = narrowedType;
}
}
}
return type;
function narrowTypeByEquality(type, expr, assumeTrue) {
var left = expr.left;
var right = expr.right;
if (left.kind !== 151 /* PrefixOperator */ || left.operator !== 95 /* TypeOfKeyword */ || left.operand.kind !== 63 /* Identifier */ || right.kind !== 7 /* StringLiteral */ || getResolvedSymbol(left.operand) !== symbol) {
return type;
}
var t = right.text;
var checkType = t === "string" ? stringType : t === "number" ? numberType : t === "boolean" ? booleanType : emptyObjectType;
if (expr.operator === 30 /* ExclamationEqualsEqualsToken */) {
assumeTrue = !assumeTrue;
}
if (assumeTrue) {
return checkType === emptyObjectType ? subtractPrimitiveTypes(type, 2 /* String */ | 4 /* Number */ | 8 /* Boolean */) : checkType;
}
else {
return checkType === emptyObjectType ? type : subtractPrimitiveTypes(type, checkType.flags);
}
}
function narrowTypeByAnd(type, expr, assumeTrue) {
if (assumeTrue) {
return narrowType(narrowType(type, expr.left, true), expr.right, true);
}
else {
return getUnionType([
narrowType(type, expr.left, false),
narrowType(narrowType(type, expr.left, true), expr.right, false)
]);
}
}
function narrowTypeByOr(type, expr, assumeTrue) {
if (assumeTrue) {
return getUnionType([
narrowType(type, expr.left, true),
narrowType(narrowType(type, expr.left, false), expr.right, true)
]);
}
else {
return narrowType(narrowType(type, expr.left, false), expr.right, false);
}
}
function narrowTypeByInstanceof(type, expr, assumeTrue) {
if (!assumeTrue || expr.left.kind !== 63 /* Identifier */ || getResolvedSymbol(expr.left) !== symbol) {
return type;
}
var rightType = checkExpression(expr.right);
if (!isTypeSubtypeOf(rightType, globalFunctionType)) {
return type;
}
var prototypeProperty = getPropertyOfType(rightType, "prototype");
if (!prototypeProperty) {
return type;
}
var prototypeType = getTypeOfSymbol(prototypeProperty);
return isTypeSubtypeOf(prototypeType, type) ? prototypeType : type;
}
function narrowType(type, expr, assumeTrue) {
switch (expr.kind) {
case 148 /* ParenExpression */:
return narrowType(type, expr.expression, assumeTrue);
case 153 /* BinaryExpression */:
var operator = expr.operator;
if (operator === 29 /* EqualsEqualsEqualsToken */ || operator === 30 /* ExclamationEqualsEqualsToken */) {
return narrowTypeByEquality(type, expr, assumeTrue);
}
else if (operator === 47 /* AmpersandAmpersandToken */) {
return narrowTypeByAnd(type, expr, assumeTrue);
}
else if (operator === 48 /* BarBarToken */) {
return narrowTypeByOr(type, expr, assumeTrue);
}
else if (operator === 85 /* InstanceOfKeyword */) {
return narrowTypeByInstanceof(type, expr, assumeTrue);
}
break;
case 151 /* PrefixOperator */:
if (expr.operator === 45 /* ExclamationToken */) {
return narrowType(type, expr.operand, !assumeTrue);
}
break;
}
return type;
}
}
function checkIdentifier(node) {
var symbol = getResolvedSymbol(node);
if (symbol.flags & 33554432 /* Import */) {
getSymbolLinks(symbol).referenced = getSymbolLinks(symbol).referenced || (!isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveImport(symbol)));
}
checkCollisionWithCapturedSuperVariable(node, node);
checkCollisionWithCapturedThisVariable(node, node);
checkCollisionWithIndexVariableInGeneratedCode(node, node);
return getNarrowedTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol), node);
}
function captureLexicalThis(node, container) {
var classNode = container.parent && container.parent.kind === 184 /* ClassDeclaration */ ? container.parent : undefined;
getNodeLinks(node).flags |= 2 /* LexicalThis */;
if (container.kind === 124 /* Property */ || container.kind === 126 /* Constructor */) {
getNodeLinks(classNode).flags |= 4 /* CaptureThis */;
}
else {
getNodeLinks(container).flags |= 4 /* CaptureThis */;
}
}
function checkThisExpression(node) {
var container = ts.getThisContainer(node, true);
var needToCaptureLexicalThis = false;
if (container.kind === 150 /* ArrowFunction */) {
container = ts.getThisContainer(container, false);
needToCaptureLexicalThis = true;
}
switch (container.kind) {
case 188 /* ModuleDeclaration */:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_body);
break;
case 187 /* EnumDeclaration */:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
break;
case 126 /* Constructor */:
if (isInConstructorArgumentInitializer(node, container)) {
error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
}
break;
case 124 /* Property */:
if (container.flags & 128 /* Static */) {
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
}
break;
}
if (needToCaptureLexicalThis) {
captureLexicalThis(node, container);
}
var classNode = container.parent && container.parent.kind === 184 /* ClassDeclaration */ ? container.parent : undefined;
if (classNode) {
var symbol = getSymbolOfNode(classNode);
return container.flags & 128 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol);
}
return anyType;
}
function getSuperContainer(node) {
while (true) {
node = node.parent;
if (!node)
return node;
switch (node.kind) {
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
case 124 /* Property */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
return node;
}
}
}
function isInConstructorArgumentInitializer(node, constructorDecl) {
for (var n = node; n && n !== constructorDecl; n = n.parent) {
if (n.kind === 123 /* Parameter */) {
return true;
}
}
return false;
}
function checkSuperExpression(node) {
var isCallExpression = node.parent.kind === 144 /* CallExpression */ && node.parent.func === node;
var enclosingClass = ts.getAncestor(node, 184 /* ClassDeclaration */);
var baseClass;
if (enclosingClass && enclosingClass.baseType) {
var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass));
baseClass = classType.baseTypes.length && classType.baseTypes[0];
}
if (!baseClass) {
error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class);
return unknownType;
}
var container = getSuperContainer(node);
if (container) {
var canUseSuperExpression = false;
if (isCallExpression) {
canUseSuperExpression = container.kind === 126 /* Constructor */;
}
else {
var needToCaptureLexicalThis = false;
while (container && container.kind === 150 /* ArrowFunction */) {
container = getSuperContainer(container);
needToCaptureLexicalThis = true;
}
if (container && container.parent && container.parent.kind === 184 /* ClassDeclaration */) {
if (container.flags & 128 /* Static */) {
canUseSuperExpression = container.kind === 125 /* Method */ || container.kind === 127 /* GetAccessor */ || container.kind === 128 /* SetAccessor */;
}
else {
canUseSuperExpression = container.kind === 125 /* Method */ || container.kind === 127 /* GetAccessor */ || container.kind === 128 /* SetAccessor */ || container.kind === 124 /* Property */ || container.kind === 126 /* Constructor */;
}
}
}
if (canUseSuperExpression) {
var returnType;
if ((container.flags & 128 /* Static */) || isCallExpression) {
getNodeLinks(node).flags |= 32 /* SuperStatic */;
returnType = getTypeOfSymbol(baseClass.symbol);
}
else {
getNodeLinks(node).flags |= 16 /* SuperInstance */;
returnType = baseClass;
}
if (container.kind === 126 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
returnType = unknownType;
}
if (!isCallExpression && needToCaptureLexicalThis) {
captureLexicalThis(node.parent, container);
}
return returnType;
}
}
if (isCallExpression) {
error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
}
else {
error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class);
}
return unknownType;
}
function getContextuallyTypedParameterType(parameter) {
var func = parameter.parent;
if (func.kind === 149 /* FunctionExpression */ || func.kind === 150 /* ArrowFunction */) {
if (isContextSensitiveExpression(func)) {
var contextualSignature = getContextualSignature(func);
if (contextualSignature) {
var funcHasRestParameters = ts.hasRestParameters(func);
var len = func.parameters.length - (funcHasRestParameters ? 1 : 0);
var indexOfParameter = ts.indexOf(func.parameters, parameter);
if (indexOfParameter < len) {
return getTypeAtPosition(contextualSignature, indexOfParameter);
}
if (indexOfParameter === (func.parameters.length - 1) && funcHasRestParameters && contextualSignature.hasRestParameter && func.parameters.length >= contextualSignature.parameters.length) {
return getTypeOfSymbol(contextualSignature.parameters[contextualSignature.parameters.length - 1]);
}
}
}
}
return undefined;
}
function getContextualTypeForInitializerExpression(node) {
var declaration = node.parent;
if (node === declaration.initializer) {
if (declaration.type) {
return getTypeFromTypeNode(declaration.type);
}
if (declaration.kind === 123 /* Parameter */) {
return getContextuallyTypedParameterType(declaration);
}
}
return undefined;
}
function getContextualTypeForReturnExpression(node) {
var func = ts.getContainingFunction(node);
if (func) {
if (func.type || func.kind === 126 /* Constructor */ || func.kind === 127 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(getDeclarationOfKind(func.symbol, 128 /* SetAccessor */))) {
return getReturnTypeOfSignature(getSignatureFromDeclaration(func));
}
var signature = getContextualSignature(func);
if (signature) {
return getReturnTypeOfSignature(signature);
}
}
return undefined;
}
function getContextualTypeForArgument(node) {
var callExpression = node.parent;
var argIndex = ts.indexOf(callExpression.arguments, node);
if (argIndex >= 0) {
var signature = getResolvedSignature(callExpression);
return getTypeAtPosition(signature, argIndex);
}
return undefined;
}
function getContextualTypeForBinaryOperand(node) {
var binaryExpression = node.parent;
var operator = binaryExpression.operator;
if (operator >= 51 /* FirstAssignment */ && operator <= 62 /* LastAssignment */) {
if (node === binaryExpression.right) {
return checkExpression(binaryExpression.left);
}
}
else if (operator === 48 /* BarBarToken */) {
var type = getContextualType(binaryExpression);
if (!type && node === binaryExpression.right) {
type = checkExpression(binaryExpression.left);
}
return type;
}
return undefined;
}
function applyToContextualType(type, mapper) {
if (!(type.flags & 16384 /* Union */)) {
return mapper(type);
}
var types = type.types;
var mappedType;
var mappedTypes;
for (var i = 0; i < types.length; i++) {
var t = mapper(types[i]);
if (t) {
if (!mappedType) {
mappedType = t;
}
else if (!mappedTypes) {
mappedTypes = [mappedType, t];
}
else {
mappedTypes.push(t);
}
}
}
return mappedTypes ? getUnionType(mappedTypes) : mappedType;
}
function getTypeOfPropertyOfContextualType(type, name) {
return applyToContextualType(type, function (t) {
var prop = getPropertyOfObjectType(t, name);
return prop ? getTypeOfSymbol(prop) : undefined;
});
}
function getIndexTypeOfContextualType(type, kind) {
return applyToContextualType(type, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); });
}
function contextualTypeIsTupleType(type) {
return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, function (t) { return getPropertyOfObjectType(t, "0"); }) : getPropertyOfObjectType(type, "0"));
}
function contextualTypeHasIndexSignature(type, kind) {
return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); }) : getIndexTypeOfObjectOrUnionType(type, kind));
}
function getContextualTypeForPropertyExpression(node) {
var declaration = node.parent;
var objectLiteral = declaration.parent;
var type = getContextualType(objectLiteral);
var name = declaration.name.text;
if (type && name) {
return getTypeOfPropertyOfContextualType(type, name) || isNumericName(name) && getIndexTypeOfContextualType(type, 1 /* Number */) || getIndexTypeOfContextualType(type, 0 /* String */);
}
return undefined;
}
function getContextualTypeForElementExpression(node) {
var arrayLiteral = node.parent;
var type = getContextualType(arrayLiteral);
if (type) {
var index = ts.indexOf(arrayLiteral.elements, node);
return getTypeOfPropertyOfContextualType(type, "" + index) || getIndexTypeOfContextualType(type, 1 /* Number */);
}
return undefined;
}
function getContextualTypeForConditionalOperand(node) {
var conditional = node.parent;
return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined;
}
function getContextualType(node) {
if (isInsideWithStatementBody(node)) {
return undefined;
}
if (node.contextualType) {
return node.contextualType;
}
var parent = node.parent;
switch (parent.kind) {
case 181 /* VariableDeclaration */:
case 123 /* Parameter */:
case 124 /* Property */:
return getContextualTypeForInitializerExpression(node);
case 150 /* ArrowFunction */:
case 169 /* ReturnStatement */:
return getContextualTypeForReturnExpression(node);
case 144 /* CallExpression */:
case 145 /* NewExpression */:
return getContextualTypeForArgument(node);
case 147 /* TypeAssertion */:
return getTypeFromTypeNode(parent.type);
case 153 /* BinaryExpression */:
return getContextualTypeForBinaryOperand(node);
case 141 /* PropertyAssignment */:
return getContextualTypeForPropertyExpression(node);
case 139 /* ArrayLiteral */:
return getContextualTypeForElementExpression(node);
case 154 /* ConditionalExpression */:
return getContextualTypeForConditionalOperand(node);
}
return undefined;
}
function getNonGenericSignature(type) {
var signatures = getSignaturesOfObjectOrUnionType(type, 0 /* Call */);
if (signatures.length === 1) {
var signature = signatures[0];
if (!signature.typeParameters) {
return signature;
}
}
}
function getContextualSignature(node) {
var type = getContextualType(node);
if (!type) {
return undefined;
}
if (!(type.flags & 16384 /* Union */)) {
return getNonGenericSignature(type);
}
var signatureList;
var types = type.types;
for (var i = 0; i < types.length; i++) {
if (signatureList && getSignaturesOfObjectOrUnionType(types[i], 0 /* Call */).length > 1) {
return undefined;
}
var signature = getNonGenericSignature(types[i]);
if (signature) {
if (!signatureList) {
signatureList = [signature];
}
else if (!compareSignatures(signatureList[0], signature, false, compareTypes)) {
return undefined;
}
else {
signatureList.push(signature);
}
}
}
var result;
if (signatureList) {
result = cloneSignature(signatureList[0]);
result.resolvedReturnType = undefined;
result.unionSignatures = signatureList;
}
return result;
}
function isInferentialContext(mapper) {
return mapper && mapper !== identityMapper;
}
function checkArrayLiteral(node, contextualMapper) {
var elements = node.elements;
if (!elements.length) {
return createArrayType(undefinedType);
}
var elementTypes = ts.map(elements, function (e) { return checkExpression(e, contextualMapper); });
var contextualType = getContextualType(node);
if (contextualType && contextualTypeIsTupleType(contextualType)) {
return createTupleType(elementTypes);
}
return createArrayType(getUnionType(elementTypes));
}
function isNumericName(name) {
return (+name).toString() === name;
}
function checkObjectLiteral(node, contextualMapper) {
var members = node.symbol.members;
var properties = {};
var contextualType = getContextualType(node);
for (var id in members) {
if (ts.hasProperty(members, id)) {
var member = members[id];
if (member.flags & 4 /* Property */) {
var type = checkExpression(member.declarations[0].initializer, contextualMapper);
var prop = createSymbol(4 /* Property */ | 268435456 /* Transient */ | member.flags, member.name);
prop.declarations = member.declarations;
prop.parent = member.parent;
if (member.valueDeclaration)
prop.valueDeclaration = member.valueDeclaration;
prop.type = type;
prop.target = member;
member = prop;
}
else {
var getAccessor = getDeclarationOfKind(member, 127 /* GetAccessor */);
if (getAccessor) {
checkAccessorDeclaration(getAccessor);
}
var setAccessor = getDeclarationOfKind(member, 128 /* SetAccessor */);
if (setAccessor) {
checkAccessorDeclaration(setAccessor);
}
}
properties[member.name] = member;
}
}
var stringIndexType = getIndexType(0 /* String */);
var numberIndexType = getIndexType(1 /* Number */);
return createAnonymousType(node.symbol, properties, emptyArray, emptyArray, stringIndexType, numberIndexType);
function getIndexType(kind) {
if (contextualType && contextualTypeHasIndexSignature(contextualType, kind)) {
var propTypes = [];
for (var id in properties) {
if (ts.hasProperty(properties, id)) {
if (kind === 0 /* String */ || isNumericName(id)) {
var type = getTypeOfSymbol(properties[id]);
if (!ts.contains(propTypes, type)) {
propTypes.push(type);
}
}
}
}
return propTypes.length ? getUnionType(propTypes) : undefinedType;
}
return undefined;
}
}
function getDeclarationKindFromSymbol(s) {
return s.valueDeclaration ? s.valueDeclaration.kind : 124 /* Property */;
}
function getDeclarationFlagsFromSymbol(s) {
return s.valueDeclaration ? s.valueDeclaration.flags : s.flags & 536870912 /* Prototype */ ? 16 /* Public */ | 128 /* Static */ : 0;
}
function checkClassPropertyAccess(node, type, prop) {
var flags = getDeclarationFlagsFromSymbol(prop);
if (!(flags & (32 /* Private */ | 64 /* Protected */))) {
return;
}
var enclosingClassDeclaration = ts.getAncestor(node, 184 /* ClassDeclaration */);
var enclosingClass = enclosingClassDeclaration ? getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClassDeclaration)) : undefined;
var declaringClass = getDeclaredTypeOfSymbol(prop.parent);
if (flags & 32 /* Private */) {
if (declaringClass !== enclosingClass) {
error(node, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(declaringClass));
}
return;
}
if (node.left.kind === 89 /* SuperKeyword */) {
return;
}
if (!enclosingClass || !hasBaseType(enclosingClass, declaringClass)) {
error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(declaringClass));
return;
}
if (flags & 128 /* Static */) {
return;
}
if (!(getTargetType(type).flags & (1024 /* Class */ | 2048 /* Interface */) && hasBaseType(type, enclosingClass))) {
error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));
}
}
function checkPropertyAccess(node) {
var type = checkExpression(node.left);
if (type === unknownType)
return type;
if (type !== anyType) {
var apparentType = getApparentType(getWidenedType(type));
if (apparentType === unknownType) {
return unknownType;
}
var prop = getPropertyOfType(apparentType, node.right.text);
if (!prop) {
if (node.right.text) {
error(node.right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(node.right), typeToString(type));
}
return unknownType;
}
getNodeLinks(node).resolvedSymbol = prop;
if (prop.parent && prop.parent.flags & 32 /* Class */) {
if (node.left.kind === 89 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 125 /* Method */) {
error(node.right, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
}
else {
checkClassPropertyAccess(node, type, prop);
}
}
return getTypeOfSymbol(prop);
}
return anyType;
}
function isValidPropertyAccess(node, propertyName) {
var type = checkExpression(node.left);
if (type !== unknownType && type !== anyType) {
var prop = getPropertyOfType(getWidenedType(type), propertyName);
if (prop && prop.parent && prop.parent.flags & 32 /* Class */) {
if (node.left.kind === 89 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 125 /* Method */) {
return false;
}
else {
var diagnosticsCount = diagnostics.length;
checkClassPropertyAccess(node, type, prop);
return diagnostics.length === diagnosticsCount;
}
}
}
return true;
}
function checkIndexedAccess(node) {
var objectType = getApparentType(checkExpression(node.object));
var indexType = checkExpression(node.index);
if (objectType === unknownType)
return unknownType;
if (isConstEnumObjectType(objectType) && node.index.kind !== 7 /* StringLiteral */) {
error(node.index, ts.Diagnostics.Index_expression_arguments_in_const_enums_must_be_of_type_string);
}
if (node.index.kind === 7 /* StringLiteral */ || node.index.kind === 6 /* NumericLiteral */) {
var name = node.index.text;
var prop = getPropertyOfType(objectType, name);
if (prop) {
getNodeLinks(node).resolvedSymbol = prop;
return getTypeOfSymbol(prop);
}
}
if (indexType.flags & (1 /* Any */ | 258 /* StringLike */ | 132 /* NumberLike */)) {
if (indexType.flags & (1 /* Any */ | 132 /* NumberLike */)) {
var numberIndexType = getIndexTypeOfType(objectType, 1 /* Number */);
if (numberIndexType) {
return numberIndexType;
}
}
var stringIndexType = getIndexTypeOfType(objectType, 0 /* String */);
if (stringIndexType) {
return stringIndexType;
}
if (compilerOptions.noImplicitAny && objectType !== anyType) {
error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type);
}
return anyType;
}
error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_or_any);
return unknownType;
}
function resolveUntypedCall(node) {
if (node.kind === 146 /* TaggedTemplateExpression */) {
checkExpression(node.template);
}
else {
ts.forEach(node.arguments, function (argument) {
checkExpression(argument);
});
}
return anySignature;
}
function resolveErrorCall(node) {
resolveUntypedCall(node);
return unknownSignature;
}
function hasCorrectArity(node, args, signature) {
var adjustedArgCount;
var typeArguments;
var callIsIncomplete;
if (node.kind === 146 /* TaggedTemplateExpression */) {
var tagExpression = node;
adjustedArgCount = args.length;
typeArguments = undefined;
if (tagExpression.template.kind === 155 /* TemplateExpression */) {
var templateExpression = tagExpression.template;
var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans);
ts.Debug.assert(lastSpan !== undefined);
callIsIncomplete = lastSpan.literal.kind === 120 /* Missing */ || ts.isUnterminatedTemplateEnd(lastSpan.literal);
}
else {
var templateLiteral = tagExpression.template;
ts.Debug.assert(templateLiteral.kind === 9 /* NoSubstitutionTemplateLiteral */);
callIsIncomplete = ts.isUnterminatedTemplateEnd(templateLiteral);
}
}
else {
var callExpression = node;
if (!callExpression.arguments) {
ts.Debug.assert(callExpression.kind === 145 /* NewExpression */);
return signature.minArgumentCount === 0;
}
adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length;
callIsIncomplete = callExpression.arguments.end === callExpression.end;
typeArguments = callExpression.typeArguments;
}
ts.Debug.assert(adjustedArgCount !== undefined, "'adjustedArgCount' undefined");
ts.Debug.assert(callIsIncomplete !== undefined, "'callIsIncomplete' undefined");
return checkArity(adjustedArgCount, typeArguments, callIsIncomplete, signature);
function checkArity(adjustedArgCount, typeArguments, callIsIncomplete, signature) {
if (!signature.hasRestParameter && adjustedArgCount > signature.parameters.length) {
return false;
}
var hasRightNumberOfTypeArgs = !typeArguments || (signature.typeParameters && typeArguments.length === signature.typeParameters.length);
if (!hasRightNumberOfTypeArgs) {
return false;
}
var hasEnoughArguments = adjustedArgCount >= signature.minArgumentCount;
return callIsIncomplete || hasEnoughArguments;
}
}
function getSingleCallSignature(type) {
if (type.flags & 48128 /* ObjectType */) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 && resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) {
return resolved.callSignatures[0];
}
}
return undefined;
}
function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) {
var context = createInferenceContext(signature.typeParameters, true);
forEachMatchingParameterType(contextualSignature, signature, function (source, target) {
inferTypes(context, instantiateType(source, contextualMapper), target);
});
return getSignatureInstantiation(signature, getInferredTypes(context));
}
function inferTypeArguments(signature, args, excludeArgument) {
var typeParameters = signature.typeParameters;
var context = createInferenceContext(typeParameters, false);
var mapper = createInferenceMapper(context);
for (var i = 0; i < args.length; i++) {
if (args[i].kind === 157 /* OmittedExpression */) {
continue;
}
if (!excludeArgument || excludeArgument[i] === undefined) {
var parameterType = getTypeAtPosition(signature, i);
if (i === 0 && args[i].parent.kind === 146 /* TaggedTemplateExpression */) {
inferTypes(context, globalTemplateStringsArrayType, parameterType);
continue;
}
inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType);
}
}
if (excludeArgument) {
for (var i = 0; i < args.length; i++) {
if (args[i].kind === 157 /* OmittedExpression */) {
continue;
}
if (excludeArgument[i] === false) {
var parameterType = getTypeAtPosition(signature, i);
inferTypes(context, checkExpressionWithContextualType(args[i], parameterType, mapper), parameterType);
}
}
}
var inferredTypes = getInferredTypes(context);
context.failedTypeParameterIndex = ts.indexOf(inferredTypes, inferenceFailureType);
for (var i = 0; i < inferredTypes.length; i++) {
if (inferredTypes[i] === inferenceFailureType) {
inferredTypes[i] = unknownType;
}
}
return context;
}
function checkTypeArguments(signature, typeArguments, typeArgumentResultTypes, reportErrors) {
var typeParameters = signature.typeParameters;
var typeArgumentsAreAssignable = true;
for (var i = 0; i < typeParameters.length; i++) {
var typeArgNode = typeArguments[i];
var typeArgument = getTypeFromTypeNode(typeArgNode);
typeArgumentResultTypes[i] = typeArgument;
if (typeArgumentsAreAssignable) {
var constraint = getConstraintOfTypeParameter(typeParameters[i]);
if (constraint) {
typeArgumentsAreAssignable = checkTypeAssignableTo(typeArgument, constraint, reportErrors ? typeArgNode : undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
}
}
}
return typeArgumentsAreAssignable;
}
function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) {
for (var i = 0; i < args.length; i++) {
var arg = args[i];
var argType;
if (arg.kind === 157 /* OmittedExpression */) {
continue;
}
var paramType = getTypeAtPosition(signature, i);
if (i === 0 && node.kind === 146 /* TaggedTemplateExpression */) {
argType = globalTemplateStringsArrayType;
}
else {
argType = arg.kind === 7 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
}
var isValidArgument = checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1);
if (!isValidArgument) {
return false;
}
}
return true;
}
function getEffectiveCallArguments(node) {
var args;
if (node.kind === 146 /* TaggedTemplateExpression */) {
var template = node.template;
args = [template];
if (template.kind === 155 /* TemplateExpression */) {
ts.forEach(template.templateSpans, function (span) {
args.push(span.expression);
});
}
}
else {
args = node.arguments || emptyArray;
}
return args;
}
function resolveCall(node, signatures, candidatesOutArray) {
var isTaggedTemplate = node.kind === 146 /* TaggedTemplateExpression */;
var typeArguments = isTaggedTemplate ? undefined : node.typeArguments;
ts.forEach(typeArguments, checkSourceElement);
var candidates = candidatesOutArray || [];
collectCandidates();
if (!candidates.length) {
error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
return resolveErrorCall(node);
}
var args = getEffectiveCallArguments(node);
var excludeArgument;
for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) {
if (isContextSensitiveExpression(args[i])) {
if (!excludeArgument) {
excludeArgument = new Array(args.length);
}
excludeArgument[i] = true;
}
}
var candidateForArgumentError;
var candidateForTypeArgumentError;
var resultOfFailedInference;
var result;
if (candidates.length > 1) {
result = chooseOverload(candidates, subtypeRelation);
}
if (!result) {
candidateForArgumentError = undefined;
candidateForTypeArgumentError = undefined;
resultOfFailedInference = undefined;
result = chooseOverload(candidates, assignableRelation);
}
if (result) {
return result;
}
if (candidateForArgumentError) {
checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true);
}
else if (candidateForTypeArgumentError) {
if (!isTaggedTemplate && node.typeArguments) {
checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, [], true);
}
else {
ts.Debug.assert(resultOfFailedInference.failedTypeParameterIndex >= 0);
var failedTypeParameter = candidateForTypeArgumentError.typeParameters[resultOfFailedInference.failedTypeParameterIndex];
var inferenceCandidates = getInferenceCandidates(resultOfFailedInference, resultOfFailedInference.failedTypeParameterIndex);
var diagnosticChainHead = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly, typeToString(failedTypeParameter));
reportNoCommonSupertypeError(inferenceCandidates, node.func || node.tag, diagnosticChainHead);
}
}
else {
error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
}
if (!fullTypeCheck) {
for (var i = 0, n = candidates.length; i < n; i++) {
if (hasCorrectArity(node, args, candidates[i])) {
return candidates[i];
}
}
}
return resolveErrorCall(node);
function chooseOverload(candidates, relation) {
for (var i = 0; i < candidates.length; i++) {
if (!hasCorrectArity(node, args, candidates[i])) {
continue;
}
var originalCandidate = candidates[i];
var inferenceResult;
while (true) {
var candidate = originalCandidate;
if (candidate.typeParameters) {
var typeArgumentTypes;
var typeArgumentsAreValid;
if (typeArguments) {
typeArgumentTypes = new Array(candidate.typeParameters.length);
typeArgumentsAreValid = checkTypeArguments(candidate, typeArguments, typeArgumentTypes, false);
}
else {
inferenceResult = inferTypeArguments(candidate, args, excludeArgument);
typeArgumentsAreValid = inferenceResult.failedTypeParameterIndex < 0;
typeArgumentTypes = inferenceResult.inferredTypes;
}
if (!typeArgumentsAreValid) {
break;
}
candidate = getSignatureInstantiation(candidate, typeArgumentTypes);
}
if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) {
break;
}
var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1;
if (index < 0) {
return candidate;
}
excludeArgument[index] = false;
}
if (originalCandidate.typeParameters) {
var instantiatedCandidate = candidate;
if (typeArgumentsAreValid) {
candidateForArgumentError = instantiatedCandidate;
}
else {
candidateForTypeArgumentError = originalCandidate;
if (!typeArguments) {
resultOfFailedInference = inferenceResult;
}
}
}
else {
ts.Debug.assert(originalCandidate === candidate);
candidateForArgumentError = originalCandidate;
}
}
return undefined;
}
function collectCandidates() {
var result = candidates;
var lastParent;
var lastSymbol;
var cutoffPos = 0;
var pos;
ts.Debug.assert(!result.length);
for (var i = 0; i < signatures.length; i++) {
var signature = signatures[i];
var symbol = signature.declaration && getSymbolOfNode(signature.declaration);
var parent = signature.declaration && signature.declaration.parent;
if (!lastSymbol || symbol === lastSymbol) {
if (lastParent && parent === lastParent) {
pos++;
}
else {
lastParent = parent;
pos = cutoffPos;
}
}
else {
pos = cutoffPos = result.length;
lastParent = parent;
}
lastSymbol = symbol;
for (var j = result.length; j > pos; j--) {
result[j] = result[j - 1];
}
result[pos] = signature;
}
}
}
function resolveCallExpression(node, candidatesOutArray) {
if (node.func.kind === 89 /* SuperKeyword */) {
var superType = checkSuperExpression(node.func);
if (superType !== unknownType) {
return resolveCall(node, getSignaturesOfType(superType, 1 /* Construct */), candidatesOutArray);
}
return resolveUntypedCall(node);
}
var funcType = checkExpression(node.func);
var apparentType = getApparentType(funcType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */);
var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */);
if (funcType === anyType || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384 /* Union */) && isTypeAssignableTo(funcType, globalFunctionType))) {
if (node.typeArguments) {
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
}
return resolveUntypedCall(node);
}
if (!callSignatures.length) {
if (constructSignatures.length) {
error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
}
else {
error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
}
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray);
}
function resolveNewExpression(node, candidatesOutArray) {
var expressionType = checkExpression(node.func);
if (expressionType === anyType) {
if (node.typeArguments) {
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
}
return resolveUntypedCall(node);
}
expressionType = getApparentType(expressionType);
if (expressionType === unknownType) {
return resolveErrorCall(node);
}
var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */);
if (constructSignatures.length) {
return resolveCall(node, constructSignatures, candidatesOutArray);
}
var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */);
if (callSignatures.length) {
var signature = resolveCall(node, callSignatures, candidatesOutArray);
if (getReturnTypeOfSignature(signature) !== voidType) {
error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
}
return signature;
}
error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature);
return resolveErrorCall(node);
}
function resolveTaggedTemplateExpression(node, candidatesOutArray) {
var tagType = checkExpression(node.tag);
var apparentType = getApparentType(tagType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */);
if (tagType === anyType || (!callSignatures.length && !(tagType.flags & 16384 /* Union */) && isTypeAssignableTo(tagType, globalFunctionType))) {
return resolveUntypedCall(node);
}
if (!callSignatures.length) {
error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray);
}
function getResolvedSignature(node, candidatesOutArray) {
var links = getNodeLinks(node);
if (!links.resolvedSignature || candidatesOutArray) {
links.resolvedSignature = anySignature;
if (node.kind === 144 /* CallExpression */) {
links.resolvedSignature = resolveCallExpression(node, candidatesOutArray);
}
else if (node.kind === 145 /* NewExpression */) {
links.resolvedSignature = resolveNewExpression(node, candidatesOutArray);
}
else if (node.kind === 146 /* TaggedTemplateExpression */) {
links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray);
}
else {
ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable.");
}
}
return links.resolvedSignature;
}
function checkCallExpression(node) {
var signature = getResolvedSignature(node);
if (node.func.kind === 89 /* SuperKeyword */) {
return voidType;
}
if (node.kind === 145 /* NewExpression */) {
var declaration = signature.declaration;
if (declaration && (declaration.kind !== 126 /* Constructor */ && declaration.kind !== 130 /* ConstructSignature */)) {
if (compilerOptions.noImplicitAny) {
error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type);
}
return anyType;
}
}
return getReturnTypeOfSignature(signature);
}
function checkTaggedTemplateExpression(node) {
return getReturnTypeOfSignature(getResolvedSignature(node));
}
function checkTypeAssertion(node) {
var exprType = checkExpression(node.operand);
var targetType = getTypeFromTypeNode(node.type);
if (fullTypeCheck && targetType !== unknownType) {
var widenedType = getWidenedType(exprType, true);
if (!(isTypeAssignableTo(targetType, widenedType))) {
checkTypeAssignableTo(exprType, targetType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other);
}
}
return targetType;
}
function getTypeAtPosition(signature, pos) {
return signature.hasRestParameter ? pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) : pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType;
}
function assignContextualParameterTypes(signature, context, mapper) {
var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0);
for (var i = 0; i < len; i++) {
var parameter = signature.parameters[i];
var links = getSymbolLinks(parameter);
links.type = instantiateType(getTypeAtPosition(context, i), mapper);
}
if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) {
var parameter = signature.parameters[signature.parameters.length - 1];
var links = getSymbolLinks(parameter);
links.type = instantiateType(getTypeOfSymbol(context.parameters[context.parameters.length - 1]), mapper);
}
}
function getReturnTypeFromBody(func, contextualMapper) {
var contextualSignature = getContextualSignature(func);
if (func.body.kind !== 183 /* FunctionBlock */) {
var unwidenedType = checkAndMarkExpression(func.body, contextualMapper);
var widenedType = getWidenedType(unwidenedType);
if (fullTypeCheck && compilerOptions.noImplicitAny && !contextualSignature && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) {
error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeToString(widenedType));
}
return widenedType;
}
var types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper);
if (types.length > 0) {
var commonType = contextualSignature ? getUnionType(types) : getCommonSupertype(types);
if (!commonType) {
error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions);
return unknownType;
}
var widenedType = getWidenedType(commonType);
if (fullTypeCheck && compilerOptions.noImplicitAny && !contextualSignature && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) {
var typeName = typeToString(widenedType);
if (func.name) {
error(func, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.declarationNameToString(func.name), typeName);
}
else {
error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName);
}
}
return widenedType;
}
return voidType;
}
function checkAndAggregateReturnExpressionTypes(body, contextualMapper) {
var aggregatedTypes = [];
ts.forEachReturnStatement(body, function (returnStatement) {
var expr = returnStatement.expression;
if (expr) {
var type = checkAndMarkExpression(expr, contextualMapper);
if (!ts.contains(aggregatedTypes, type)) {
aggregatedTypes.push(type);
}
}
});
return aggregatedTypes;
}
function bodyContainsAReturnStatement(funcBody) {
return ts.forEachReturnStatement(funcBody, function (returnStatement) {
return true;
});
}
function bodyContainsSingleThrowStatement(body) {
return (body.statements.length === 1) && (body.statements[0].kind === 175 /* ThrowStatement */);
}
function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) {
if (!fullTypeCheck) {
return;
}
if (returnType === voidType || returnType === anyType) {
return;
}
if (!func.body || func.body.kind !== 183 /* FunctionBlock */) {
return;
}
var bodyBlock = func.body;
if (bodyContainsAReturnStatement(bodyBlock)) {
return;
}
if (bodyContainsSingleThrowStatement(bodyBlock)) {
return;
}
error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement);
}
function checkFunctionExpression(node, contextualMapper) {
if (contextualMapper === identityMapper) {
return anyFunctionType;
}
var links = getNodeLinks(node);
var type = getTypeOfSymbol(node.symbol);
if (!(links.flags & 64 /* ContextChecked */)) {
var contextualSignature = getContextualSignature(node);
if (!(links.flags & 64 /* ContextChecked */)) {
links.flags |= 64 /* ContextChecked */;
if (contextualSignature) {
var signature = getSignaturesOfType(type, 0 /* Call */)[0];
if (isContextSensitiveExpression(node)) {
assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper);
}
if (!node.type) {
signature.resolvedReturnType = resolvingType;
var returnType = getReturnTypeFromBody(node, contextualMapper);
if (signature.resolvedReturnType === resolvingType) {
signature.resolvedReturnType = returnType;
}
}
}
checkSignatureDeclaration(node);
}
}
return type;
}
function checkFunctionExpressionBody(node) {
if (node.type) {
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
}
if (node.body.kind === 183 /* FunctionBlock */) {
checkSourceElement(node.body);
}
else {
var exprType = checkExpression(node.body);
if (node.type) {
checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, undefined);
}
checkFunctionExpressionBodies(node.body);
}
}
function checkArithmeticOperandType(operand, type, diagnostic) {
if (!(type.flags & (1 /* Any */ | 132 /* NumberLike */))) {
error(operand, diagnostic);
return false;
}
return true;
}
function checkReferenceExpression(n, invalidReferenceMessage, constantVarianleMessage) {
function findSymbol(n) {
var symbol = getNodeLinks(n).resolvedSymbol;
return symbol && getExportSymbolOfValueSymbolIfExported(symbol);
}
function isReferenceOrErrorExpression(n) {
switch (n.kind) {
case 63 /* Identifier */:
var symbol = findSymbol(n);
return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3 /* Variable */) !== 0;
case 142 /* PropertyAccess */:
var symbol = findSymbol(n);
return !symbol || symbol === unknownSymbol || (symbol.flags & ~8 /* EnumMember */) !== 0;
case 143 /* IndexedAccess */:
return true;
case 148 /* ParenExpression */:
return isReferenceOrErrorExpression(n.expression);
default:
return false;
}
}
function isConstVariableReference(n) {
switch (n.kind) {
case 63 /* Identifier */:
case 142 /* PropertyAccess */:
var symbol = findSymbol(n);
return symbol && (symbol.flags & 3 /* Variable */) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 4096 /* Const */) !== 0;
case 143 /* IndexedAccess */:
var index = n.index;
var symbol = findSymbol(n.object);
if (symbol && index.kind === 7 /* StringLiteral */) {
var name = index.text;
var prop = getPropertyOfType(getTypeOfSymbol(symbol), name);
return prop && (prop.flags & 3 /* Variable */) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 4096 /* Const */) !== 0;
}
return false;
case 148 /* ParenExpression */:
return isConstVariableReference(n.expression);
default:
return false;
}
}
if (!isReferenceOrErrorExpression(n)) {
error(n, invalidReferenceMessage);
return false;
}
if (isConstVariableReference(n)) {
error(n, constantVarianleMessage);
return false;
}
return true;
}
function checkPrefixExpression(node) {
var operandType = checkExpression(node.operand);
switch (node.operator) {
case 32 /* PlusToken */:
case 33 /* MinusToken */:
case 46 /* TildeToken */:
return numberType;
case 45 /* ExclamationToken */:
case 72 /* DeleteKeyword */:
return booleanType;
case 95 /* TypeOfKeyword */:
return stringType;
case 97 /* VoidKeyword */:
return undefinedType;
case 37 /* PlusPlusToken */:
case 38 /* MinusMinusToken */:
var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
if (ok) {
checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
}
return numberType;
}
return unknownType;
}
function checkPostfixExpression(node) {
var operandType = checkExpression(node.operand);
var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
if (ok) {
checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
}
return numberType;
}
function isStructuredType(type) {
if (type.flags & 16384 /* Union */) {
return !ts.forEach(type.types, function (t) { return !isStructuredType(t); });
}
return (type.flags & 65025 /* Structured */) !== 0;
}
function isConstEnumObjectType(type) {
return type.flags & (48128 /* ObjectType */ | 32768 /* Anonymous */) && type.symbol && isConstEnumSymbol(type.symbol);
}
function isConstEnumSymbol(symbol) {
return (symbol.flags & 128 /* ConstEnum */) !== 0;
}
function checkInstanceOfExpression(node, leftType, rightType) {
if (leftType !== unknownType && !isStructuredType(leftType)) {
error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
if (rightType !== unknownType && rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) {
error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type);
}
return booleanType;
}
function checkInExpression(node, leftType, rightType) {
if (leftType !== anyType && leftType !== stringType && leftType !== numberType) {
error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number);
}
if (!isStructuredType(rightType)) {
error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
return booleanType;
}
function checkBinaryExpression(node, contextualMapper) {
var operator = node.operator;
var leftType = checkExpression(node.left, contextualMapper);
var rightType = checkExpression(node.right, contextualMapper);
switch (operator) {
case 34 /* AsteriskToken */:
case 54 /* AsteriskEqualsToken */:
case 35 /* SlashToken */:
case 55 /* SlashEqualsToken */:
case 36 /* PercentToken */:
case 56 /* PercentEqualsToken */:
case 33 /* MinusToken */:
case 53 /* MinusEqualsToken */:
case 39 /* LessThanLessThanToken */:
case 57 /* LessThanLessThanEqualsToken */:
case 40 /* GreaterThanGreaterThanToken */:
case 58 /* GreaterThanGreaterThanEqualsToken */:
case 41 /* GreaterThanGreaterThanGreaterThanToken */:
case 59 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
case 43 /* BarToken */:
case 61 /* BarEqualsToken */:
case 44 /* CaretToken */:
case 62 /* CaretEqualsToken */:
case 42 /* AmpersandToken */:
case 60 /* AmpersandEqualsToken */:
if (leftType.flags & (32 /* Undefined */ | 64 /* Null */))
leftType = rightType;
if (rightType.flags & (32 /* Undefined */ | 64 /* Null */))
rightType = leftType;
var suggestedOperator;
if ((leftType.flags & 8 /* Boolean */) && (rightType.flags & 8 /* Boolean */) && (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) {
error(node, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(node.operator), ts.tokenToString(suggestedOperator));
}
else {
var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
if (leftOk && rightOk) {
checkAssignmentOperator(numberType);
}
}
return numberType;
case 32 /* PlusToken */:
case 52 /* PlusEqualsToken */:
if (leftType.flags & (32 /* Undefined */ | 64 /* Null */))
leftType = rightType;
if (rightType.flags & (32 /* Undefined */ | 64 /* Null */))
rightType = leftType;
var resultType;
if (leftType.flags & 132 /* NumberLike */ && rightType.flags & 132 /* NumberLike */) {
resultType = numberType;
}
else if (leftType.flags & 258 /* StringLike */ || rightType.flags & 258 /* StringLike */) {
resultType = stringType;
}
else if (leftType.flags & 1 /* Any */ || leftType === unknownType || rightType.flags & 1 /* Any */ || rightType === unknownType) {
resultType = anyType;
}
if (!resultType) {
reportOperatorError();
return anyType;
}
if (operator === 52 /* PlusEqualsToken */) {
checkAssignmentOperator(resultType);
}
return resultType;
case 27 /* EqualsEqualsToken */:
case 28 /* ExclamationEqualsToken */:
case 29 /* EqualsEqualsEqualsToken */:
case 30 /* ExclamationEqualsEqualsToken */:
case 23 /* LessThanToken */:
case 24 /* GreaterThanToken */:
case 25 /* LessThanEqualsToken */:
case 26 /* GreaterThanEqualsToken */:
if (!isTypeAssignableTo(leftType, rightType) && !isTypeAssignableTo(rightType, leftType)) {
reportOperatorError();
}
return booleanType;
case 85 /* InstanceOfKeyword */:
return checkInstanceOfExpression(node, leftType, rightType);
case 84 /* InKeyword */:
return checkInExpression(node, leftType, rightType);
case 47 /* AmpersandAmpersandToken */:
return rightType;
case 48 /* BarBarToken */:
return getUnionType([leftType, rightType]);
case 51 /* EqualsToken */:
checkAssignmentOperator(rightType);
return rightType;
case 22 /* CommaToken */:
return rightType;
}
function getSuggestedBooleanOperator(operator) {
switch (operator) {
case 43 /* BarToken */:
case 61 /* BarEqualsToken */:
return 48 /* BarBarToken */;
case 44 /* CaretToken */:
case 62 /* CaretEqualsToken */:
return 30 /* ExclamationEqualsEqualsToken */;
case 42 /* AmpersandToken */:
case 60 /* AmpersandEqualsToken */:
return 47 /* AmpersandAmpersandToken */;
default:
return undefined;
}
}
function checkAssignmentOperator(valueType) {
if (fullTypeCheck && operator >= 51 /* FirstAssignment */ && operator <= 62 /* LastAssignment */) {
var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant);
if (ok) {
checkTypeAssignableTo(valueType, leftType, node.left, undefined);
}
}
}
function reportOperatorError() {
error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operator), typeToString(leftType), typeToString(rightType));
}
}
function checkConditionalExpression(node, contextualMapper) {
checkExpression(node.condition);
var type1 = checkExpression(node.whenTrue, contextualMapper);
var type2 = checkExpression(node.whenFalse, contextualMapper);
return getUnionType([type1, type2]);
}
function checkTemplateExpression(node) {
ts.forEach(node.templateSpans, function (templateSpan) {
checkExpression(templateSpan.expression);
});
return stringType;
}
function checkExpressionWithContextualType(node, contextualType, contextualMapper) {
var saveContextualType = node.contextualType;
node.contextualType = contextualType;
var result = checkExpression(node, contextualMapper);
node.contextualType = saveContextualType;
return result;
}
function checkAndMarkExpression(node, contextualMapper) {
var result = checkExpression(node, contextualMapper);
getNodeLinks(node).flags |= 1 /* TypeChecked */;
return result;
}
function checkExpression(node, contextualMapper) {
var type = checkExpressionNode(node, contextualMapper);
if (contextualMapper && contextualMapper !== identityMapper) {
var signature = getSingleCallSignature(type);
if (signature && signature.typeParameters) {
var contextualType = getContextualType(node);
if (contextualType) {
var contextualSignature = getSingleCallSignature(contextualType);
if (contextualSignature && !contextualSignature.typeParameters) {
type = getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper));
}
}
}
}
if (isConstEnumObjectType(type)) {
var ok = (node.parent.kind === 142 /* PropertyAccess */ && node.parent.left === node) || (node.parent.kind === 143 /* IndexedAccess */ && node.parent.object === node) || ((node.kind === 63 /* Identifier */ || node.kind === 121 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node));
if (!ok) {
error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment);
}
}
return type;
}
function checkExpressionNode(node, contextualMapper) {
switch (node.kind) {
case 63 /* Identifier */:
return checkIdentifier(node);
case 91 /* ThisKeyword */:
return checkThisExpression(node);
case 89 /* SuperKeyword */:
return checkSuperExpression(node);
case 87 /* NullKeyword */:
return nullType;
case 93 /* TrueKeyword */:
case 78 /* FalseKeyword */:
return booleanType;
case 6 /* NumericLiteral */:
return numberType;
case 155 /* TemplateExpression */:
return checkTemplateExpression(node);
case 7 /* StringLiteral */:
case 9 /* NoSubstitutionTemplateLiteral */:
return stringType;
case 8 /* RegularExpressionLiteral */:
return globalRegExpType;
case 121 /* QualifiedName */:
return checkPropertyAccess(node);
case 139 /* ArrayLiteral */:
return checkArrayLiteral(node, contextualMapper);
case 140 /* ObjectLiteral */:
return checkObjectLiteral(node, contextualMapper);
case 142 /* PropertyAccess */:
return checkPropertyAccess(node);
case 143 /* IndexedAccess */:
return checkIndexedAccess(node);
case 144 /* CallExpression */:
case 145 /* NewExpression */:
return checkCallExpression(node);
case 146 /* TaggedTemplateExpression */:
return checkTaggedTemplateExpression(node);
case 147 /* TypeAssertion */:
return checkTypeAssertion(node);
case 148 /* ParenExpression */:
return checkExpression(node.expression);
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
return checkFunctionExpression(node, contextualMapper);
case 151 /* PrefixOperator */:
return checkPrefixExpression(node);
case 152 /* PostfixOperator */:
return checkPostfixExpression(node);
case 153 /* BinaryExpression */:
return checkBinaryExpression(node, contextualMapper);
case 154 /* ConditionalExpression */:
return checkConditionalExpression(node, contextualMapper);
case 157 /* OmittedExpression */:
return undefinedType;
}
return unknownType;
}
function checkTypeParameter(node) {
checkSourceElement(node.constraint);
if (fullTypeCheck) {
checkTypeParameterHasIllegalReferencesInConstraint(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0);
}
}
function checkParameter(parameterDeclaration) {
checkVariableDeclaration(parameterDeclaration);
if (fullTypeCheck) {
checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name);
if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */ | 64 /* Protected */) && !(parameterDeclaration.parent.kind === 126 /* Constructor */ && parameterDeclaration.parent.body)) {
error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
}
if (parameterDeclaration.flags & 8 /* Rest */) {
if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) {
error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type);
}
}
else {
if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) {
error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);
}
}
}
function checkReferencesInInitializer(n) {
if (n.kind === 63 /* Identifier */) {
var referencedSymbol = getNodeLinks(n).resolvedSymbol;
if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(parameterDeclaration.parent.locals, referencedSymbol.name, 107455 /* Value */) === referencedSymbol) {
if (referencedSymbol.valueDeclaration.kind === 123 /* Parameter */) {
if (referencedSymbol.valueDeclaration === parameterDeclaration) {
error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(parameterDeclaration.name));
return;
}
var enclosingOrReferencedParameter = ts.forEach(parameterDeclaration.parent.parameters, function (p) { return p === parameterDeclaration || p === referencedSymbol.valueDeclaration ? p : undefined; });
if (enclosingOrReferencedParameter === referencedSymbol.valueDeclaration) {
return;
}
}
error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(parameterDeclaration.name), ts.declarationNameToString(n));
}
}
else {
ts.forEachChild(n, checkReferencesInInitializer);
}
}
if (parameterDeclaration.initializer) {
checkReferencesInInitializer(parameterDeclaration.initializer);
}
}
function checkSignatureDeclaration(node) {
checkTypeParameters(node.typeParameters);
ts.forEach(node.parameters, checkParameter);
if (node.type) {
checkSourceElement(node.type);
}
if (fullTypeCheck) {
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithArgumentsInGeneratedCode(node);
if (compilerOptions.noImplicitAny && !node.type) {
switch (node.kind) {
case 130 /* ConstructSignature */:
error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
break;
case 129 /* CallSignature */:
error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
break;
}
}
}
checkSpecializedSignatureDeclaration(node);
}
function checkTypeForDuplicateIndexSignatures(node) {
if (node.kind === 185 /* InterfaceDeclaration */) {
var nodeSymbol = getSymbolOfNode(node);
if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
return;
}
}
var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
if (indexSymbol) {
var seenNumericIndexer = false;
var seenStringIndexer = false;
for (var i = 0, len = indexSymbol.declarations.length; i < len; ++i) {
var declaration = indexSymbol.declarations[i];
if (declaration.parameters.length == 1 && declaration.parameters[0].type) {
switch (declaration.parameters[0].type.kind) {
case 118 /* StringKeyword */:
if (!seenStringIndexer) {
seenStringIndexer = true;
}
else {
error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
}
break;
case 116 /* NumberKeyword */:
if (!seenNumericIndexer) {
seenNumericIndexer = true;
}
else {
error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
}
break;
}
}
}
}
}
function checkPropertyDeclaration(node) {
checkVariableDeclaration(node);
}
function checkMethodDeclaration(node) {
checkFunctionDeclaration(node);
}
function checkConstructorDeclaration(node) {
checkSignatureDeclaration(node);
checkSourceElement(node.body);
var symbol = getSymbolOfNode(node);
var firstDeclaration = getDeclarationOfKind(symbol, node.kind);
if (node === firstDeclaration) {
checkFunctionOrConstructorSymbol(symbol);
}
if (!node.body) {
return;
}
if (!fullTypeCheck) {
return;
}
function isSuperCallExpression(n) {
return n.kind === 144 /* CallExpression */ && n.func.kind === 89 /* SuperKeyword */;
}
function containsSuperCall(n) {
if (isSuperCallExpression(n)) {
return true;
}
switch (n.kind) {
case 149 /* FunctionExpression */:
case 182 /* FunctionDeclaration */:
case 150 /* ArrowFunction */:
case 140 /* ObjectLiteral */: return false;
default: return ts.forEachChild(n, containsSuperCall);
}
}
function markThisReferencesAsErrors(n) {
if (n.kind === 91 /* ThisKeyword */) {
error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
}
else if (n.kind !== 149 /* FunctionExpression */ && n.kind !== 182 /* FunctionDeclaration */) {
ts.forEachChild(n, markThisReferencesAsErrors);
}
}
function isInstancePropertyWithInitializer(n) {
return n.kind === 124 /* Property */ && !(n.flags & 128 /* Static */) && !!n.initializer;
}
if (node.parent.baseType) {
if (containsSuperCall(node.body)) {
var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (16 /* Public */ | 32 /* Private */ | 64 /* Protected */); });
if (superCallShouldBeFirst) {
var statements = node.body.statements;
if (!statements.length || statements[0].kind !== 161 /* ExpressionStatement */ || !isSuperCallExpression(statements[0].expression)) {
error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);
}
else {
markThisReferencesAsErrors(statements[0].expression);
}
}
}
else {
error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);
}
}
}
function checkAccessorDeclaration(node) {
if (fullTypeCheck) {
if (node.kind === 127 /* GetAccessor */) {
if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) {
error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement);
}
}
var otherKind = node.kind === 127 /* GetAccessor */ ? 128 /* SetAccessor */ : 127 /* GetAccessor */;
var otherAccessor = getDeclarationOfKind(node.symbol, otherKind);
if (otherAccessor) {
if (((node.flags & 112 /* AccessibilityModifier */) !== (otherAccessor.flags & 112 /* AccessibilityModifier */))) {
error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility);
}
var thisType = getAnnotatedAccessorType(node);
var otherType = getAnnotatedAccessorType(otherAccessor);
if (thisType && otherType) {
if (!isTypeIdenticalTo(thisType, otherType)) {
error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type);
}
}
}
}
checkFunctionDeclaration(node);
checkAndStoreTypeOfAccessors(getSymbolOfNode(node));
}
function checkTypeReference(node) {
var type = getTypeFromTypeReferenceNode(node);
if (type !== unknownType && node.typeArguments) {
var len = node.typeArguments.length;
for (var i = 0; i < len; i++) {
checkSourceElement(node.typeArguments[i]);
var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]);
if (fullTypeCheck && constraint) {
var typeArgument = type.typeArguments[i];
checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
}
}
}
}
function checkTypeQuery(node) {
getTypeFromTypeQueryNode(node);
}
function checkTypeLiteral(node) {
ts.forEach(node.members, checkSourceElement);
if (fullTypeCheck) {
var type = getTypeFromTypeLiteralNode(node);
checkIndexConstraints(type);
checkTypeForDuplicateIndexSignatures(node);
}
}
function checkArrayType(node) {
checkSourceElement(node.elementType);
}
function checkTupleType(node) {
ts.forEach(node.elementTypes, checkSourceElement);
}
function checkUnionType(node) {
ts.forEach(node.types, checkSourceElement);
}
function isPrivateWithinAmbient(node) {
return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node);
}
function checkSpecializedSignatureDeclaration(signatureDeclarationNode) {
if (!fullTypeCheck) {
return;
}
var signature = getSignatureFromDeclaration(signatureDeclarationNode);
if (!signature.hasStringLiterals) {
return;
}
if (signatureDeclarationNode.body) {
error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type);
return;
}
var signaturesToCheck;
if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 185 /* InterfaceDeclaration */) {
ts.Debug.assert(signatureDeclarationNode.kind === 129 /* CallSignature */ || signatureDeclarationNode.kind === 130 /* ConstructSignature */);
var signatureKind = signatureDeclarationNode.kind === 129 /* CallSignature */ ? 0 /* Call */ : 1 /* Construct */;
var containingSymbol = getSymbolOfNode(signatureDeclarationNode.parent);
var containingType = getDeclaredTypeOfSymbol(containingSymbol);
signaturesToCheck = getSignaturesOfType(containingType, signatureKind);
}
else {
signaturesToCheck = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode));
}
for (var i = 0; i < signaturesToCheck.length; i++) {
var otherSignature = signaturesToCheck[i];
if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) {
return;
}
}
error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature);
}
function getEffectiveDeclarationFlags(n, flagsToCheck) {
var flags = n.flags;
if (n.parent.kind !== 185 /* InterfaceDeclaration */ && ts.isInAmbientContext(n)) {
if (!(flags & 2 /* Ambient */)) {
flags |= 1 /* Export */;
}
flags |= 2 /* Ambient */;
}
return flags & flagsToCheck;
}
function checkFunctionOrConstructorSymbol(symbol) {
if (!fullTypeCheck) {
return;
}
function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) {
var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags;
if (someButNotAllOverloadFlags !== 0) {
var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent;
var canonicalFlags = implementationSharesContainerWithFirstOverload ? getEffectiveDeclarationFlags(implementation, flagsToCheck) : getEffectiveDeclarationFlags(overloads[0], flagsToCheck);
ts.forEach(overloads, function (o) {
var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags;
if (deviation & 1 /* Export */) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported);
}
else if (deviation & 2 /* Ambient */) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient);
}
else if (deviation & (32 /* Private */ | 64 /* Protected */)) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected);
}
else if (deviation & 4 /* QuestionMark */) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required);
}
});
}
}
var flagsToCheck = 1 /* Export */ | 2 /* Ambient */ | 32 /* Private */ | 64 /* Protected */ | 4 /* QuestionMark */;
var someNodeFlags = 0;
var allNodeFlags = flagsToCheck;
var hasOverloads = false;
var bodyDeclaration;
var lastSeenNonAmbientDeclaration;
var previousDeclaration;
var declarations = symbol.declarations;
var isConstructor = (symbol.flags & 16384 /* Constructor */) !== 0;
function reportImplementationExpectedError(node) {
if (node.name && node.name.kind === 120 /* Missing */) {
return;
}
var seen = false;
var subsequentNode = ts.forEachChild(node.parent, function (c) {
if (seen) {
return c;
}
else {
seen = c === node;
}
});
if (subsequentNode) {
if (subsequentNode.kind === node.kind) {
var errorNode = subsequentNode.name || subsequentNode;
if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) {
ts.Debug.assert(node.kind === 125 /* Method */);
ts.Debug.assert((node.flags & 128 /* Static */) !== (subsequentNode.flags & 128 /* Static */));
var diagnostic = node.flags & 128 /* Static */ ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
error(errorNode, diagnostic);
return;
}
else if (subsequentNode.body) {
error(errorNode, ts.Diagnostics.Function_implementation_name_must_be_0, ts.declarationNameToString(node.name));
return;
}
}
}
var errorNode = node.name || node;
if (isConstructor) {
error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing);
}
else {
error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration);
}
}
var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536 /* Module */;
var duplicateFunctionDeclaration = false;
var multipleConstructorImplementation = false;
for (var i = 0; i < declarations.length; i++) {
var node = declarations[i];
var inAmbientContext = ts.isInAmbientContext(node);
var inAmbientContextOrInterface = node.parent.kind === 185 /* InterfaceDeclaration */ || node.parent.kind === 134 /* TypeLiteral */ || inAmbientContext;
if (inAmbientContextOrInterface) {
previousDeclaration = undefined;
}
if (node.kind === 182 /* FunctionDeclaration */ || node.kind === 125 /* Method */ || node.kind === 126 /* Constructor */) {
var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
someNodeFlags |= currentNodeFlags;
allNodeFlags &= currentNodeFlags;
if (node.body && bodyDeclaration) {
if (isConstructor) {
multipleConstructorImplementation = true;
}
else {
duplicateFunctionDeclaration = true;
}
}
else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) {
reportImplementationExpectedError(previousDeclaration);
}
if (node.body) {
if (!bodyDeclaration) {
bodyDeclaration = node;
}
}
else {
hasOverloads = true;
}
previousDeclaration = node;
if (!inAmbientContextOrInterface) {
lastSeenNonAmbientDeclaration = node;
}
}
}
if (multipleConstructorImplementation) {
ts.forEach(declarations, function (declaration) {
error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed);
});
}
if (duplicateFunctionDeclaration) {
ts.forEach(declarations, function (declaration) {
error(declaration.name, ts.Diagnostics.Duplicate_function_implementation);
});
}
if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) {
reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
}
if (hasOverloads) {
checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags);
if (bodyDeclaration) {
var signatures = getSignaturesOfSymbol(symbol);
var bodySignature = getSignatureFromDeclaration(bodyDeclaration);
if (!bodySignature.hasStringLiterals) {
for (var i = 0, len = signatures.length; i < len; ++i) {
if (!signatures[i].hasStringLiterals && !isSignatureAssignableTo(bodySignature, signatures[i])) {
error(signatures[i].declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation);
break;
}
}
}
}
}
}
function checkExportsOnMergedDeclarations(node) {
if (!fullTypeCheck) {
return;
}
var symbol;
var symbol = node.localSymbol;
if (!symbol) {
symbol = getSymbolOfNode(node);
if (!(symbol.flags & 29360128 /* Export */)) {
return;
}
}
if (getDeclarationOfKind(symbol, node.kind) !== node) {
return;
}
var exportedDeclarationSpaces = 0;
var nonExportedDeclarationSpaces = 0;
ts.forEach(symbol.declarations, function (d) {
var declarationSpaces = getDeclarationSpaces(d);
if (getEffectiveDeclarationFlags(d, 1 /* Export */)) {
exportedDeclarationSpaces |= declarationSpaces;
}
else {
nonExportedDeclarationSpaces |= declarationSpaces;
}
});
var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces;
if (commonDeclarationSpace) {
ts.forEach(symbol.declarations, function (d) {
if (getDeclarationSpaces(d) & commonDeclarationSpace) {
error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(d.name));
}
});
}
function getDeclarationSpaces(d) {
switch (d.kind) {
case 185 /* InterfaceDeclaration */:
return 8388608 /* ExportType */;
case 188 /* ModuleDeclaration */:
return d.name.kind === 7 /* StringLiteral */ || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */ ? 16777216 /* ExportNamespace */ | 4194304 /* ExportValue */ : 16777216 /* ExportNamespace */;
case 184 /* ClassDeclaration */:
case 187 /* EnumDeclaration */:
return 8388608 /* ExportType */ | 4194304 /* ExportValue */;
case 190 /* ImportDeclaration */:
var result = 0;
var target = resolveImport(getSymbolOfNode(d));
ts.forEach(target.declarations, function (d) {
result |= getDeclarationSpaces(d);
});
return result;
default:
return 4194304 /* ExportValue */;
}
}
}
function checkFunctionDeclaration(node) {
checkSignatureDeclaration(node);
var symbol = getSymbolOfNode(node);
var localSymbol = node.localSymbol || symbol;
var firstDeclaration = getDeclarationOfKind(localSymbol, node.kind);
if (node === firstDeclaration) {
checkFunctionOrConstructorSymbol(localSymbol);
}
if (symbol.parent) {
if (getDeclarationOfKind(symbol, node.kind) === node) {
checkFunctionOrConstructorSymbol(symbol);
}
}
checkSourceElement(node.body);
if (node.type && !isAccessor(node.kind)) {
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
}
if (fullTypeCheck && compilerOptions.noImplicitAny && !node.body && !node.type) {
if (!isPrivateWithinAmbient(node)) {
var typeName = typeToString(anyType);
if (node.name) {
error(node, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.declarationNameToString(node.name), typeName);
}
else {
error(node, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName);
}
}
}
}
function checkBlock(node) {
ts.forEach(node.statements, checkSourceElement);
}
function checkCollisionWithArgumentsInGeneratedCode(node) {
if (!ts.hasRestParameters(node) || ts.isInAmbientContext(node) || !node.body) {
return;
}
ts.forEach(node.parameters, function (p) {
if (p.name && p.name.text === argumentsSymbol.name) {
error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);
}
});
}
function checkCollisionWithIndexVariableInGeneratedCode(node, name) {
if (!(name && name.text === "_i")) {
return;
}
if (node.kind === 123 /* Parameter */) {
if (node.parent.body && ts.hasRestParameters(node.parent) && !ts.isInAmbientContext(node)) {
error(node, ts.Diagnostics.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter);
}
return;
}
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol === unknownSymbol) {
return;
}
var current = node;
while (current) {
var definedOnCurrentLevel = ts.forEach(symbol.declarations, function (d) { return d.parent === current ? d : undefined; });
if (definedOnCurrentLevel) {
return;
}
switch (current.kind) {
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 125 /* Method */:
case 150 /* ArrowFunction */:
case 126 /* Constructor */:
if (ts.hasRestParameters(current)) {
error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter);
return;
}
break;
}
current = current.parent;
}
}
function needCollisionCheckForIdentifier(node, identifier, name) {
if (!(identifier && identifier.text === name)) {
return false;
}
if (node.kind === 124 /* Property */ || node.kind === 125 /* Method */ || node.kind === 127 /* GetAccessor */ || node.kind === 128 /* SetAccessor */) {
return false;
}
if (ts.isInAmbientContext(node)) {
return false;
}
if (node.kind === 123 /* Parameter */ && !node.parent.body) {
return false;
}
return true;
}
function checkCollisionWithCapturedThisVariable(node, name) {
if (!needCollisionCheckForIdentifier(node, name, "_this")) {
return;
}
potentialThisCollisions.push(node);
}
function checkIfThisIsCapturedInEnclosingScope(node) {
var current = node;
while (current) {
if (getNodeCheckFlags(current) & 4 /* CaptureThis */) {
var isDeclaration = node.kind !== 63 /* Identifier */;
if (isDeclaration) {
error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference);
}
return;
}
current = current.parent;
}
}
function checkCollisionWithCapturedSuperVariable(node, name) {
if (!needCollisionCheckForIdentifier(node, name, "_super")) {
return;
}
var enclosingClass = ts.getAncestor(node, 184 /* ClassDeclaration */);
if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) {
return;
}
if (enclosingClass.baseType) {
var isDeclaration = node.kind !== 63 /* Identifier */;
if (isDeclaration) {
error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference);
}
}
}
function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
return;
}
if (node.kind === 188 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
return;
}
var parent = node.kind === 181 /* VariableDeclaration */ ? node.parent.parent : node.parent;
if (parent.kind === 193 /* SourceFile */ && ts.isExternalModule(parent)) {
error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
}
}
function checkCollisionWithConstDeclarations(node) {
if (node.initializer && (node.flags & 6144 /* BlockScoped */) === 0) {
var symbol = getSymbolOfNode(node);
if (symbol.flags & 1 /* FunctionScopedVariable */) {
var localDeclarationSymbol = resolveName(node, node.name.text, 3 /* Variable */, undefined, undefined);
if (localDeclarationSymbol && localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) {
if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 4096 /* Const */) {
error(node, ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0, symbolToString(localDeclarationSymbol));
}
}
}
}
}
function checkVariableDeclaration(node) {
checkSourceElement(node.type);
checkExportsOnMergedDeclarations(node);
if (fullTypeCheck) {
var symbol = getSymbolOfNode(node);
var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol);
var type;
var useTypeFromValueDeclaration = node === symbol.valueDeclaration;
if (useTypeFromValueDeclaration) {
type = typeOfValueDeclaration;
}
else {
type = getTypeOfVariableOrPropertyDeclaration(node);
}
if (node.initializer) {
if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) {
checkTypeAssignableTo(checkAndMarkExpression(node.initializer), type, node, undefined);
}
checkCollisionWithConstDeclarations(node);
}
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
if (!useTypeFromValueDeclaration) {
if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) {
error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.declarationNameToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type));
}
}
}
}
function checkVariableStatement(node) {
ts.forEach(node.declarations, checkVariableDeclaration);
}
function checkExpressionStatement(node) {
checkExpression(node.expression);
}
function checkIfStatement(node) {
checkExpression(node.expression);
checkSourceElement(node.thenStatement);
checkSourceElement(node.elseStatement);
}
function checkDoStatement(node) {
checkSourceElement(node.statement);
checkExpression(node.expression);
}
function checkWhileStatement(node) {
checkExpression(node.expression);
checkSourceElement(node.statement);
}
function checkForStatement(node) {
if (node.declarations)
ts.forEach(node.declarations, checkVariableDeclaration);
if (node.initializer)
checkExpression(node.initializer);
if (node.condition)
checkExpression(node.condition);
if (node.iterator)
checkExpression(node.iterator);
checkSourceElement(node.statement);
}
function checkForInStatement(node) {
if (node.declaration) {
checkVariableDeclaration(node.declaration);
if (node.declaration.type) {
error(node.declaration, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation);
}
}
if (node.variable) {
var exprType = checkExpression(node.variable);
if (exprType !== anyType && exprType !== stringType) {
error(node.variable, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);
}
else {
checkReferenceExpression(node.variable, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant);
}
}
var exprType = checkExpression(node.expression);
if (!isStructuredType(exprType) && exprType !== unknownType) {
error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
checkSourceElement(node.statement);
}
function checkBreakOrContinueStatement(node) {
}
function checkReturnStatement(node) {
if (node.expression && !(getNodeLinks(node.expression).flags & 1 /* TypeChecked */)) {
var func = ts.getContainingFunction(node);
if (func) {
if (func.kind === 128 /* SetAccessor */) {
if (node.expression) {
error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value);
}
}
else {
var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func));
var checkAssignability = func.type || (func.kind === 127 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(getDeclarationOfKind(func.symbol, 128 /* SetAccessor */)));
if (checkAssignability) {
checkTypeAssignableTo(checkExpression(node.expression), returnType, node.expression, undefined);
}
else if (func.kind == 126 /* Constructor */) {
if (!isTypeAssignableTo(checkExpression(node.expression), returnType)) {
error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
}
}
}
}
}
}
function checkWithStatement(node) {
checkExpression(node.expression);
error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any);
}
function checkSwitchStatement(node) {
var expressionType = checkExpression(node.expression);
ts.forEach(node.clauses, function (clause) {
if (fullTypeCheck && clause.expression) {
var caseType = checkExpression(clause.expression);
if (!isTypeAssignableTo(expressionType, caseType)) {
checkTypeAssignableTo(caseType, expressionType, clause.expression, undefined);
}
}
checkBlock(clause);
});
}
function checkLabeledStatement(node) {
checkSourceElement(node.statement);
}
function checkThrowStatement(node) {
checkExpression(node.expression);
}
function checkTryStatement(node) {
checkBlock(node.tryBlock);
if (node.catchBlock)
checkBlock(node.catchBlock);
if (node.finallyBlock)
checkBlock(node.finallyBlock);
}
function checkIndexConstraints(type) {
function checkIndexConstraintForProperty(prop, propertyType, indexDeclaration, indexType, indexKind) {
if (!indexType) {
return;
}
if (indexKind === 1 /* Number */ && !isNumericName(prop.name)) {
return;
}
var errorNode;
if (prop.parent === type.symbol) {
errorNode = prop.valueDeclaration;
}
else if (indexDeclaration) {
errorNode = indexDeclaration;
}
else if (type.flags & 2048 /* Interface */) {
var someBaseClassHasBothPropertyAndIndexer = ts.forEach(type.baseTypes, function (base) { return getPropertyOfObjectType(base, prop.name) && getIndexTypeOfType(base, indexKind); });
errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : type.symbol.declarations[0];
}
if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
var errorMessage = indexKind === 0 /* String */ ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
}
}
var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1 /* Number */);
var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0 /* String */);
var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
if (stringIndexType || numberIndexType) {
ts.forEach(getPropertiesOfObjectType(type), function (prop) {
var propType = getTypeOfSymbol(prop);
checkIndexConstraintForProperty(prop, propType, declaredStringIndexer, stringIndexType, 0 /* String */);
checkIndexConstraintForProperty(prop, propType, declaredNumberIndexer, numberIndexType, 1 /* Number */);
});
}
var errorNode;
if (stringIndexType && numberIndexType) {
errorNode = declaredNumberIndexer || declaredStringIndexer;
if (!errorNode && (type.flags & 2048 /* Interface */)) {
var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); });
errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0];
}
}
if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) {
error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
}
}
function checkTypeNameIsReserved(name, message) {
switch (name.text) {
case "any":
case "number":
case "boolean":
case "string":
case "void":
error(name, message, name.text);
}
}
function checkTypeParameters(typeParameterDeclarations) {
if (typeParameterDeclarations) {
for (var i = 0; i < typeParameterDeclarations.length; i++) {
var node = typeParameterDeclarations[i];
checkTypeParameter(node);
if (fullTypeCheck) {
for (var j = 0; j < i; j++) {
if (typeParameterDeclarations[j].symbol === node.symbol) {
error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.declarationNameToString(node.name));
}
}
}
}
}
}
function checkClassDeclaration(node) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
checkTypeParameters(node.typeParameters);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
var type = getDeclaredTypeOfSymbol(symbol);
var staticType = getTypeOfSymbol(symbol);
if (node.baseType) {
emitExtends = emitExtends || !ts.isInAmbientContext(node);
checkTypeReference(node.baseType);
}
if (type.baseTypes.length) {
if (fullTypeCheck) {
var baseType = type.baseTypes[0];
checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
var staticBaseType = getTypeOfSymbol(baseType.symbol);
checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, 107455 /* Value */)) {
error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType));
}
checkKindsOfPropertyMemberOverrides(type, baseType);
}
checkExpression(node.baseType.typeName);
}
if (node.implementedTypes) {
ts.forEach(node.implementedTypes, function (typeRefNode) {
checkTypeReference(typeRefNode);
if (fullTypeCheck) {
var t = getTypeFromTypeReferenceNode(typeRefNode);
if (t !== unknownType) {
var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t;
if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) {
checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1);
}
else {
error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface);
}
}
}
});
}
ts.forEach(node.members, checkSourceElement);
if (fullTypeCheck) {
checkIndexConstraints(type);
checkTypeForDuplicateIndexSignatures(node);
}
}
function getTargetSymbol(s) {
return s.flags & 67108864 /* Instantiated */ ? getSymbolLinks(s).target : s;
}
function checkKindsOfPropertyMemberOverrides(type, baseType) {
var baseProperties = getPropertiesOfObjectType(baseType);
for (var i = 0, len = baseProperties.length; i < len; ++i) {
var base = getTargetSymbol(baseProperties[i]);
if (base.flags & 536870912 /* Prototype */) {
continue;
}
var derived = getTargetSymbol(getPropertyOfObjectType(type, base.name));
if (derived) {
var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base);
var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived);
if ((baseDeclarationFlags & 32 /* Private */) || (derivedDeclarationFlags & 32 /* Private */)) {
continue;
}
if ((baseDeclarationFlags & 128 /* Static */) !== (derivedDeclarationFlags & 128 /* Static */)) {
continue;
}
if ((base.flags & derived.flags & 8192 /* Method */) || ((base.flags & 98308 /* PropertyOrAccessor */) && (derived.flags & 98308 /* PropertyOrAccessor */))) {
continue;
}
var errorMessage;
if (base.flags & 8192 /* Method */) {
if (derived.flags & 98304 /* Accessor */) {
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
}
else {
ts.Debug.assert((derived.flags & 4 /* Property */) !== 0);
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property;
}
}
else if (base.flags & 4 /* Property */) {
ts.Debug.assert((derived.flags & 8192 /* Method */) !== 0);
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;
}
else {
ts.Debug.assert((base.flags & 98304 /* Accessor */) !== 0);
ts.Debug.assert((derived.flags & 8192 /* Method */) !== 0);
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
}
error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type));
}
}
}
function isAccessor(kind) {
return kind === 127 /* GetAccessor */ || kind === 128 /* SetAccessor */;
}
function areTypeParametersIdentical(list1, list2) {
if (!list1 && !list2) {
return true;
}
if (!list1 || !list2 || list1.length !== list2.length) {
return false;
}
for (var i = 0, len = list1.length; i < len; i++) {
var tp1 = list1[i];
var tp2 = list2[i];
if (tp1.name.text !== tp2.name.text) {
return false;
}
if (!tp1.constraint && !tp2.constraint) {
continue;
}
if (!tp1.constraint || !tp2.constraint) {
return false;
}
if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) {
return false;
}
}
return true;
}
function checkInheritedPropertiesAreIdentical(type, typeNode) {
if (!type.baseTypes.length || type.baseTypes.length === 1) {
return true;
}
var seen = {};
ts.forEach(type.declaredProperties, function (p) {
seen[p.name] = { prop: p, containingType: type };
});
var ok = true;
for (var i = 0, len = type.baseTypes.length; i < len; ++i) {
var base = type.baseTypes[i];
var properties = getPropertiesOfObjectType(base);
for (var j = 0, proplen = properties.length; j < proplen; ++j) {
var prop = properties[j];
if (!ts.hasProperty(seen, prop.name)) {
seen[prop.name] = { prop: prop, containingType: base };
}
else {
var existing = seen[prop.name];
var isInheritedProperty = existing.containingType !== type;
if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) {
ok = false;
var typeName1 = typeToString(existing.containingType);
var typeName2 = typeToString(base);
var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2);
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2);
addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, program.getCompilerHost().getNewLine()));
}
}
}
}
return ok;
}
function checkInterfaceDeclaration(node) {
checkTypeParameters(node.typeParameters);
if (fullTypeCheck) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
var firstInterfaceDecl = getDeclarationOfKind(symbol, 185 /* InterfaceDeclaration */);
if (symbol.declarations.length > 1) {
if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) {
error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters);
}
}
if (node === firstInterfaceDecl) {
var type = getDeclaredTypeOfSymbol(symbol);
if (checkInheritedPropertiesAreIdentical(type, node.name)) {
ts.forEach(type.baseTypes, function (baseType) {
checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1);
});
checkIndexConstraints(type);
}
}
}
ts.forEach(node.baseTypes, checkTypeReference);
ts.forEach(node.members, checkSourceElement);
if (fullTypeCheck) {
checkTypeForDuplicateIndexSignatures(node);
}
}
function checkTypeAliasDeclaration(node) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
checkSourceElement(node.type);
}
function computeEnumMemberValues(node) {
var nodeLinks = getNodeLinks(node);
if (!(nodeLinks.flags & 128 /* EnumValuesComputed */)) {
var enumSymbol = getSymbolOfNode(node);
var enumType = getDeclaredTypeOfSymbol(enumSymbol);
var autoValue = 0;
var ambient = ts.isInAmbientContext(node);
var enumIsConst = ts.isConstEnumDeclaration(node);
ts.forEach(node.members, function (member) {
if (isNumericName(member.name.text)) {
error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
}
var initializer = member.initializer;
if (initializer) {
autoValue = getConstantValueForEnumMemberInitializer(initializer, enumIsConst);
if (autoValue === undefined) {
if (enumIsConst) {
error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression);
}
else if (!ambient) {
checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined);
}
}
else if (enumIsConst) {
if (isNaN(autoValue)) {
error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN);
}
else if (!isFinite(autoValue)) {
error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);
}
}
}
else if (ambient && !enumIsConst) {
autoValue = undefined;
}
if (autoValue !== undefined) {
getNodeLinks(member).enumMemberValue = autoValue++;
}
});
nodeLinks.flags |= 128 /* EnumValuesComputed */;
}
function getConstantValueForEnumMemberInitializer(initializer, enumIsConst) {
return evalConstant(initializer);
function evalConstant(e) {
switch (e.kind) {
case 151 /* PrefixOperator */:
var value = evalConstant(e.operand);
if (value === undefined) {
return undefined;
}
switch (e.operator) {
case 32 /* PlusToken */: return value;
case 33 /* MinusToken */: return -value;
case 46 /* TildeToken */: return enumIsConst ? ~value : undefined;
}
return undefined;
case 153 /* BinaryExpression */:
if (!enumIsConst) {
return undefined;
}
var left = evalConstant(e.left);
if (left === undefined) {
return undefined;
}
var right = evalConstant(e.right);
if (right === undefined) {
return undefined;
}
switch (e.operator) {
case 43 /* BarToken */: return left | right;
case 42 /* AmpersandToken */: return left & right;
case 40 /* GreaterThanGreaterThanToken */: return left >> right;
case 41 /* GreaterThanGreaterThanGreaterThanToken */: return left >>> right;
case 39 /* LessThanLessThanToken */: return left << right;
case 44 /* CaretToken */: return left ^ right;
case 34 /* AsteriskToken */: return left * right;
case 35 /* SlashToken */: return left / right;
case 32 /* PlusToken */: return left + right;
case 33 /* MinusToken */: return left - right;
case 36 /* PercentToken */: return left % right;
}
return undefined;
case 6 /* NumericLiteral */:
return +e.text;
case 148 /* ParenExpression */:
return enumIsConst ? evalConstant(e.expression) : undefined;
case 63 /* Identifier */:
case 143 /* IndexedAccess */:
case 142 /* PropertyAccess */:
if (!enumIsConst) {
return undefined;
}
var member = initializer.parent;
var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent));
var enumType;
var propertyName;
if (e.kind === 63 /* Identifier */) {
enumType = currentType;
propertyName = e.text;
}
else {
if (e.kind === 143 /* IndexedAccess */) {
if (e.index.kind !== 7 /* StringLiteral */) {
return undefined;
}
var enumType = getTypeOfNode(e.object);
propertyName = e.index.text;
}
else {
var enumType = getTypeOfNode(e.left);
propertyName = e.right.text;
}
if (enumType !== currentType) {
return undefined;
}
}
if (propertyName === undefined) {
return undefined;
}
var property = getPropertyOfObjectType(enumType, propertyName);
if (!property || !(property.flags & 8 /* EnumMember */)) {
return undefined;
}
var propertyDecl = property.valueDeclaration;
if (member === propertyDecl) {
return undefined;
}
if (!isDefinedBefore(propertyDecl, member)) {
return undefined;
}
return getNodeLinks(propertyDecl).enumMemberValue;
}
}
}
}
function checkEnumDeclaration(node) {
if (!fullTypeCheck) {
return;
}
checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
computeEnumMemberValues(node);
var enumSymbol = getSymbolOfNode(node);
var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind);
if (node === firstDeclaration) {
if (enumSymbol.declarations.length > 1) {
var enumIsConst = ts.isConstEnumDeclaration(node);
ts.forEach(enumSymbol.declarations, function (decl) {
if (ts.isConstEnumDeclaration(decl) !== enumIsConst) {
error(decl.name, ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const);
}
});
}
var seenEnumMissingInitialInitializer = false;
ts.forEach(enumSymbol.declarations, function (declaration) {
if (declaration.kind !== 187 /* EnumDeclaration */) {
return false;
}
var enumDeclaration = declaration;
if (!enumDeclaration.members.length) {
return false;
}
var firstEnumMember = enumDeclaration.members[0];
if (!firstEnumMember.initializer) {
if (seenEnumMissingInitialInitializer) {
error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element);
}
else {
seenEnumMissingInitialInitializer = true;
}
}
});
}
}
function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
var declarations = symbol.declarations;
for (var i = 0; i < declarations.length; i++) {
var declaration = declarations[i];
if ((declaration.kind === 184 /* ClassDeclaration */ || (declaration.kind === 182 /* FunctionDeclaration */ && declaration.body)) && !ts.isInAmbientContext(declaration)) {
return declaration;
}
}
return undefined;
}
function checkModuleDeclaration(node) {
if (fullTypeCheck) {
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
if (symbol.flags & 512 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) {
var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol);
if (classOrFunc) {
if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) {
error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged);
}
else if (node.pos < classOrFunc.pos) {
error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged);
}
}
}
if (node.name.kind === 7 /* StringLiteral */) {
if (!isGlobalSourceFile(node.parent)) {
error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules);
}
if (isExternalModuleNameRelative(node.name.text)) {
error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name);
}
}
}
checkSourceElement(node.body);
}
function getFirstIdentifier(node) {
while (node.kind === 121 /* QualifiedName */) {
node = node.left;
}
return node;
}
function checkImportDeclaration(node) {
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
var symbol = getSymbolOfNode(node);
var target;
if (node.entityName) {
target = resolveImport(symbol);
if (target !== unknownSymbol) {
if (target.flags & 107455 /* Value */) {
var moduleName = getFirstIdentifier(node.entityName);
if (resolveEntityName(node, moduleName, 107455 /* Value */ | 1536 /* Namespace */).flags & 1536 /* Namespace */) {
checkExpression(node.entityName);
}
else {
error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName));
}
}
if (target.flags & 3152352 /* Type */) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0);
}
}
}
else {
if (node.parent.kind === 193 /* SourceFile */) {
target = resolveImport(symbol);
}
else if (node.parent.kind === 189 /* ModuleBlock */ && node.parent.parent.name.kind === 7 /* StringLiteral */) {
if (isExternalModuleNameRelative(node.externalModuleName.text)) {
error(node, ts.Diagnostics.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name);
target = unknownSymbol;
}
else {
target = resolveImport(symbol);
}
}
else {
target = unknownSymbol;
}
}
if (target !== unknownSymbol) {
var excludedMeanings = (symbol.flags & 107455 /* Value */ ? 107455 /* Value */ : 0) | (symbol.flags & 3152352 /* Type */ ? 3152352 /* Type */ : 0) | (symbol.flags & 1536 /* Namespace */ ? 1536 /* Namespace */ : 0);
if (target.flags & excludedMeanings) {
error(node, ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0, symbolToString(symbol));
}
}
}
function checkExportAssignment(node) {
var container = node.parent;
if (container.kind !== 193 /* SourceFile */) {
container = container.parent;
}
checkTypeOfExportAssignmentSymbol(getSymbolOfNode(container));
}
function checkSourceElement(node) {
if (!node)
return;
switch (node.kind) {
case 122 /* TypeParameter */:
return checkTypeParameter(node);
case 123 /* Parameter */:
return checkParameter(node);
case 124 /* Property */:
return checkPropertyDeclaration(node);
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
case 131 /* IndexSignature */:
return checkSignatureDeclaration(node);
case 125 /* Method */:
return checkMethodDeclaration(node);
case 126 /* Constructor */:
return checkConstructorDeclaration(node);
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
return checkAccessorDeclaration(node);
case 132 /* TypeReference */:
return checkTypeReference(node);
case 133 /* TypeQuery */:
return checkTypeQuery(node);
case 134 /* TypeLiteral */:
return checkTypeLiteral(node);
case 135 /* ArrayType */:
return checkArrayType(node);
case 136 /* TupleType */:
return checkTupleType(node);
case 137 /* UnionType */:
return checkUnionType(node);
case 138 /* ParenType */:
return checkSourceElement(node.type);
case 182 /* FunctionDeclaration */:
return checkFunctionDeclaration(node);
case 158 /* Block */:
return checkBlock(node);
case 183 /* FunctionBlock */:
case 189 /* ModuleBlock */:
return checkBody(node);
case 159 /* VariableStatement */:
return checkVariableStatement(node);
case 161 /* ExpressionStatement */:
return checkExpressionStatement(node);
case 162 /* IfStatement */:
return checkIfStatement(node);
case 163 /* DoStatement */:
return checkDoStatement(node);
case 164 /* WhileStatement */:
return checkWhileStatement(node);
case 165 /* ForStatement */:
return checkForStatement(node);
case 166 /* ForInStatement */:
return checkForInStatement(node);
case 167 /* ContinueStatement */:
case 168 /* BreakStatement */:
return checkBreakOrContinueStatement(node);
case 169 /* ReturnStatement */:
return checkReturnStatement(node);
case 170 /* WithStatement */:
return checkWithStatement(node);
case 171 /* SwitchStatement */:
return checkSwitchStatement(node);
case 174 /* LabeledStatement */:
return checkLabeledStatement(node);
case 175 /* ThrowStatement */:
return checkThrowStatement(node);
case 176 /* TryStatement */:
return checkTryStatement(node);
case 181 /* VariableDeclaration */:
return ts.Debug.fail("Checker encountered variable declaration");
case 184 /* ClassDeclaration */:
return checkClassDeclaration(node);
case 185 /* InterfaceDeclaration */:
return checkInterfaceDeclaration(node);
case 186 /* TypeAliasDeclaration */:
return checkTypeAliasDeclaration(node);
case 187 /* EnumDeclaration */:
return checkEnumDeclaration(node);
case 188 /* ModuleDeclaration */:
return checkModuleDeclaration(node);
case 190 /* ImportDeclaration */:
return checkImportDeclaration(node);
case 191 /* ExportAssignment */:
return checkExportAssignment(node);
}
}
function checkFunctionExpressionBodies(node) {
switch (node.kind) {
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
ts.forEach(node.parameters, checkFunctionExpressionBodies);
checkFunctionExpressionBody(node);
break;
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 182 /* FunctionDeclaration */:
ts.forEach(node.parameters, checkFunctionExpressionBodies);
break;
case 170 /* WithStatement */:
checkFunctionExpressionBodies(node.expression);
break;
case 123 /* Parameter */:
case 124 /* Property */:
case 139 /* ArrayLiteral */:
case 140 /* ObjectLiteral */:
case 141 /* PropertyAssignment */:
case 142 /* PropertyAccess */:
case 143 /* IndexedAccess */:
case 144 /* CallExpression */:
case 145 /* NewExpression */:
case 146 /* TaggedTemplateExpression */:
case 147 /* TypeAssertion */:
case 148 /* ParenExpression */:
case 151 /* PrefixOperator */:
case 152 /* PostfixOperator */:
case 153 /* BinaryExpression */:
case 154 /* ConditionalExpression */:
case 158 /* Block */:
case 183 /* FunctionBlock */:
case 189 /* ModuleBlock */:
case 159 /* VariableStatement */:
case 161 /* ExpressionStatement */:
case 162 /* IfStatement */:
case 163 /* DoStatement */:
case 164 /* WhileStatement */:
case 165 /* ForStatement */:
case 166 /* ForInStatement */:
case 167 /* ContinueStatement */:
case 168 /* BreakStatement */:
case 169 /* ReturnStatement */:
case 171 /* SwitchStatement */:
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
case 174 /* LabeledStatement */:
case 175 /* ThrowStatement */:
case 176 /* TryStatement */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
case 181 /* VariableDeclaration */:
case 184 /* ClassDeclaration */:
case 187 /* EnumDeclaration */:
case 192 /* EnumMember */:
case 193 /* SourceFile */:
ts.forEachChild(node, checkFunctionExpressionBodies);
break;
}
}
function checkBody(node) {
checkBlock(node);
checkFunctionExpressionBodies(node);
}
function checkSourceFile(node) {
var links = getNodeLinks(node);
if (!(links.flags & 1 /* TypeChecked */)) {
emitExtends = false;
potentialThisCollisions.length = 0;
checkBody(node);
if (ts.isExternalModule(node)) {
var symbol = getExportAssignmentSymbol(node.symbol);
if (symbol && symbol.flags & 33554432 /* Import */) {
getSymbolLinks(symbol).referenced = true;
}
}
if (potentialThisCollisions.length) {
ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope);
potentialThisCollisions.length = 0;
}
if (emitExtends)
links.flags |= 8 /* EmitExtends */;
links.flags |= 1 /* TypeChecked */;
}
}
function checkProgram() {
ts.forEach(program.getSourceFiles(), checkSourceFile);
}
function getSortedDiagnostics() {
ts.Debug.assert(fullTypeCheck, "diagnostics are available only in the full typecheck mode");
if (diagnosticsModified) {
diagnostics.sort(ts.compareDiagnostics);
diagnostics = ts.deduplicateSortedDiagnostics(diagnostics);
diagnosticsModified = false;
}
return diagnostics;
}
function getDiagnostics(sourceFile) {
if (sourceFile) {
checkSourceFile(sourceFile);
return ts.filter(getSortedDiagnostics(), function (d) { return d.file === sourceFile; });
}
checkProgram();
return getSortedDiagnostics();
}
function getGlobalDiagnostics() {
return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; });
}
function getNodeAtPosition(sourceFile, position) {
function findChildAtPosition(parent) {
var child = ts.forEachChild(parent, function (node) {
if (position >= node.pos && position <= node.end && position >= ts.getTokenPosOfNode(node)) {
return findChildAtPosition(node);
}
});
return child || parent;
}
if (position < sourceFile.pos)
position = sourceFile.pos;
if (position > sourceFile.end)
position = sourceFile.end;
return findChildAtPosition(sourceFile);
}
function isInsideWithStatementBody(node) {
if (node) {
while (node.parent) {
if (node.parent.kind === 170 /* WithStatement */ && node.parent.statement === node) {
return true;
}
node = node.parent;
}
}
return false;
}
function getSymbolsInScope(location, meaning) {
var symbols = {};
var memberFlags = 0;
function copySymbol(symbol, meaning) {
if (symbol.flags & meaning) {
var id = symbol.name;
if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) {
symbols[id] = symbol;
}
}
}
function copySymbols(source, meaning) {
if (meaning) {
for (var id in source) {
if (ts.hasProperty(source, id)) {
copySymbol(source[id], meaning);
}
}
}
}
if (isInsideWithStatementBody(location)) {
return [];
}
while (location) {
if (location.locals && !isGlobalSourceFile(location)) {
copySymbols(location.locals, meaning);
}
switch (location.kind) {
case 193 /* SourceFile */:
if (!ts.isExternalModule(location))
break;
case 188 /* ModuleDeclaration */:
copySymbols(getSymbolOfNode(location).exports, meaning & 35653619 /* ModuleMember */);
break;
case 187 /* EnumDeclaration */:
copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */);
break;
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
if (!(memberFlags & 128 /* Static */)) {
copySymbols(getSymbolOfNode(location).members, meaning & 3152352 /* Type */);
}
break;
case 149 /* FunctionExpression */:
if (location.name) {
copySymbol(location.symbol, meaning);
}
break;
case 178 /* CatchBlock */:
if (location.variable.text) {
copySymbol(location.symbol, meaning);
}
break;
}
memberFlags = location.flags;
location = location.parent;
}
copySymbols(globals, meaning);
return ts.mapToArray(symbols);
}
function isTypeDeclarationName(name) {
return name.kind == 63 /* Identifier */ && isTypeDeclaration(name.parent) && name.parent.name === name;
}
function isTypeDeclaration(node) {
switch (node.kind) {
case 122 /* TypeParameter */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
case 187 /* EnumDeclaration */:
return true;
}
}
function isTypeReferenceIdentifier(entityName) {
var node = entityName;
while (node.parent && node.parent.kind === 121 /* QualifiedName */)
node = node.parent;
return node.parent && node.parent.kind === 132 /* TypeReference */;
}
function isTypeNode(node) {
if (132 /* FirstTypeNode */ <= node.kind && node.kind <= 138 /* LastTypeNode */) {
return true;
}
switch (node.kind) {
case 109 /* AnyKeyword */:
case 116 /* NumberKeyword */:
case 118 /* StringKeyword */:
case 110 /* BooleanKeyword */:
return true;
case 97 /* VoidKeyword */:
return node.parent.kind !== 151 /* PrefixOperator */;
case 7 /* StringLiteral */:
return node.parent.kind === 123 /* Parameter */;
case 63 /* Identifier */:
if (node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node) {
node = node.parent;
}
case 121 /* QualifiedName */:
ts.Debug.assert(node.kind === 63 /* Identifier */ || node.kind === 121 /* QualifiedName */, "'node' was expected to be a qualified name or identifier in 'isTypeNode'.");
var parent = node.parent;
if (parent.kind === 133 /* TypeQuery */) {
return false;
}
if (132 /* FirstTypeNode */ <= parent.kind && parent.kind <= 138 /* LastTypeNode */) {
return true;
}
switch (parent.kind) {
case 122 /* TypeParameter */:
return node === parent.constraint;
case 124 /* Property */:
case 123 /* Parameter */:
case 181 /* VariableDeclaration */:
return node === parent.type;
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
case 126 /* Constructor */:
case 125 /* Method */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
return node === parent.type;
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
case 131 /* IndexSignature */:
return node === parent.type;
case 147 /* TypeAssertion */:
return node === parent.type;
case 144 /* CallExpression */:
case 145 /* NewExpression */:
return parent.typeArguments && parent.typeArguments.indexOf(node) >= 0;
case 146 /* TaggedTemplateExpression */:
return false;
}
}
return false;
}
function isInRightSideOfImportOrExportAssignment(node) {
while (node.parent.kind === 121 /* QualifiedName */) {
node = node.parent;
}
if (node.parent.kind === 190 /* ImportDeclaration */) {
return node.parent.entityName === node;
}
if (node.parent.kind === 191 /* ExportAssignment */) {
return node.parent.exportName === node;
}
return false;
}
function isRightSideOfQualifiedNameOrPropertyAccess(node) {
return (node.parent.kind === 121 /* QualifiedName */ || node.parent.kind === 142 /* PropertyAccess */) && node.parent.right === node;
}
function getSymbolOfEntityName(entityName) {
if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) {
return getSymbolOfNode(entityName.parent);
}
if (entityName.parent.kind === 191 /* ExportAssignment */) {
return resolveEntityName(entityName.parent.parent, entityName, 107455 /* Value */ | 3152352 /* Type */ | 1536 /* Namespace */ | 33554432 /* Import */);
}
if (isInRightSideOfImportOrExportAssignment(entityName)) {
return getSymbolOfPartOfRightHandSideOfImport(entityName);
}
if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
entityName = entityName.parent;
}
if (ts.isExpression(entityName)) {
if (entityName.kind === 63 /* Identifier */) {
var meaning = 107455 /* Value */ | 33554432 /* Import */;
return resolveEntityName(entityName, entityName, meaning);
}
else if (entityName.kind === 121 /* QualifiedName */ || entityName.kind === 142 /* PropertyAccess */) {
var symbol = getNodeLinks(entityName).resolvedSymbol;
if (!symbol) {
checkPropertyAccess(entityName);
}
return getNodeLinks(entityName).resolvedSymbol;
}
else {
return;
}
}
else if (isTypeReferenceIdentifier(entityName)) {
var meaning = entityName.parent.kind === 132 /* TypeReference */ ? 3152352 /* Type */ : 1536 /* Namespace */;
meaning |= 33554432 /* Import */;
return resolveEntityName(entityName, entityName, meaning);
}
return undefined;
}
function getSymbolInfo(node) {
if (isInsideWithStatementBody(node)) {
return undefined;
}
if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
return getSymbolOfNode(node.parent);
}
if (node.kind === 63 /* Identifier */ && isInRightSideOfImportOrExportAssignment(node)) {
return node.parent.kind === 191 /* ExportAssignment */ ? getSymbolOfEntityName(node) : getSymbolOfPartOfRightHandSideOfImport(node);
}
switch (node.kind) {
case 63 /* Identifier */:
case 142 /* PropertyAccess */:
case 121 /* QualifiedName */:
return getSymbolOfEntityName(node);
case 91 /* ThisKeyword */:
case 89 /* SuperKeyword */:
var type = checkExpression(node);
return type.symbol;
case 111 /* ConstructorKeyword */:
var constructorDeclaration = node.parent;
if (constructorDeclaration && constructorDeclaration.kind === 126 /* Constructor */) {
return constructorDeclaration.parent.symbol;
}
return undefined;
case 7 /* StringLiteral */:
if (node.parent.kind === 190 /* ImportDeclaration */ && node.parent.externalModuleName === node) {
var importSymbol = getSymbolOfNode(node.parent);
var moduleType = getTypeOfSymbol(importSymbol);
return moduleType ? moduleType.symbol : undefined;
}
case 6 /* NumericLiteral */:
if (node.parent.kind == 143 /* IndexedAccess */ && node.parent.index === node) {
var objectType = checkExpression(node.parent.object);
if (objectType === unknownType)
return undefined;
var apparentType = getApparentType(objectType);
if (apparentType === unknownType)
return undefined;
return getPropertyOfType(apparentType, node.text);
}
break;
}
return undefined;
}
function getTypeOfNode(node) {
if (isInsideWithStatementBody(node)) {
return unknownType;
}
if (ts.isExpression(node)) {
return getTypeOfExpression(node);
}
if (isTypeNode(node)) {
return getTypeFromTypeNode(node);
}
if (isTypeDeclaration(node)) {
var symbol = getSymbolOfNode(node);
return getDeclaredTypeOfSymbol(symbol);
}
if (isTypeDeclarationName(node)) {
var symbol = getSymbolInfo(node);
return symbol && getDeclaredTypeOfSymbol(symbol);
}
if (ts.isDeclaration(node)) {
var symbol = getSymbolOfNode(node);
return getTypeOfSymbol(symbol);
}
if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
var symbol = getSymbolInfo(node);
return symbol && getTypeOfSymbol(symbol);
}
if (isInRightSideOfImportOrExportAssignment(node)) {
var symbol = getSymbolInfo(node);
var declaredType = symbol && getDeclaredTypeOfSymbol(symbol);
return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol);
}
return unknownType;
}
function getTypeOfExpression(expr) {
if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
expr = expr.parent;
}
return checkExpression(expr);
}
function getAugmentedPropertiesOfType(type) {
var type = getApparentType(type);
var propsByName = createSymbolTable(getPropertiesOfType(type));
if (getSignaturesOfType(type, 0 /* Call */).length || getSignaturesOfType(type, 1 /* Construct */).length) {
ts.forEach(getPropertiesOfType(globalFunctionType), function (p) {
if (!ts.hasProperty(propsByName, p.name)) {
propsByName[p.name] = p;
}
});
}
return getNamedMembers(propsByName);
}
function getRootSymbols(symbol) {
if (symbol.flags & 1073741824 /* UnionProperty */) {
var symbols = [];
var name = symbol.name;
ts.forEach(getSymbolLinks(symbol).unionType.types, function (t) {
symbols.push(getPropertyOfType(t, name));
});
return symbols;
}
else if (symbol.flags & 268435456 /* Transient */) {
var target = getSymbolLinks(symbol).target;
if (target) {
return [target];
}
}
return [symbol];
}
function isExternalModuleSymbol(symbol) {
return symbol.flags & 512 /* ValueModule */ && symbol.declarations.length === 1 && symbol.declarations[0].kind === 193 /* SourceFile */;
}
function isNodeDescendentOf(node, ancestor) {
while (node) {
if (node === ancestor)
return true;
node = node.parent;
}
return false;
}
function isUniqueLocalName(name, container) {
for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) {
if (node.locals && ts.hasProperty(node.locals, name) && node.locals[name].flags & (107455 /* Value */ | 4194304 /* ExportValue */)) {
return false;
}
}
return true;
}
function getLocalNameOfContainer(container) {
var links = getNodeLinks(container);
if (!links.localModuleName) {
var prefix = "";
var name = ts.unescapeIdentifier(container.name.text);
while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) {
prefix += "_";
}
links.localModuleName = prefix + ts.getTextOfNode(container.name);
}
return links.localModuleName;
}
function getLocalNameForSymbol(symbol, location) {
var node = location;
while (node) {
if ((node.kind === 188 /* ModuleDeclaration */ || node.kind === 187 /* EnumDeclaration */) && getSymbolOfNode(node) === symbol) {
return getLocalNameOfContainer(node);
}
node = node.parent;
}
ts.Debug.fail("getLocalNameForSymbol failed");
}
function getExpressionNamePrefix(node) {
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol) {
var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol);
if (symbol !== exportSymbol && !(exportSymbol.flags & 944 /* ExportHasLocal */)) {
symbol = exportSymbol;
}
if (symbol.parent) {
return isExternalModuleSymbol(symbol.parent) ? "exports" : getLocalNameForSymbol(getParentOfSymbol(symbol), node.parent);
}
}
}
function getExportAssignmentName(node) {
var symbol = getExportAssignmentSymbol(getSymbolOfNode(node));
return symbol && symbolIsValue(symbol) && !isConstEnumSymbol(symbol) ? symbolToString(symbol) : undefined;
}
function isTopLevelValueImportWithEntityName(node) {
if (node.parent.kind !== 193 /* SourceFile */ || !node.entityName) {
return false;
}
return isImportResolvedToValue(getSymbolOfNode(node));
}
function hasSemanticErrors() {
return getDiagnostics().length > 0 || getGlobalDiagnostics().length > 0;
}
function hasEarlyErrors(sourceFile) {
return ts.forEach(getDiagnostics(sourceFile), function (d) { return d.isEarly; });
}
function isImportResolvedToValue(symbol) {
var target = resolveImport(symbol);
return target !== unknownSymbol && target.flags & 107455 /* Value */ && !isConstEnumOrConstEnumOnlyModule(target);
}
function isConstEnumOrConstEnumOnlyModule(s) {
return isConstEnumSymbol(s) || s.constEnumOnlyModule;
}
function isReferencedImportDeclaration(node) {
var symbol = getSymbolOfNode(node);
if (getSymbolLinks(symbol).referenced) {
return true;
}
if (node.flags & 1 /* Export */) {
return isImportResolvedToValue(symbol);
}
return false;
}
function isImplementationOfOverload(node) {
if (node.body) {
var symbol = getSymbolOfNode(node);
var signaturesOfSymbol = getSignaturesOfSymbol(symbol);
return signaturesOfSymbol.length > 1 || (signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node);
}
return false;
}
function getNodeCheckFlags(node) {
return getNodeLinks(node).flags;
}
function getEnumMemberValue(node) {
computeEnumMemberValues(node.parent);
return getNodeLinks(node).enumMemberValue;
}
function getConstantValue(node) {
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol && (symbol.flags & 8 /* EnumMember */)) {
var declaration = symbol.valueDeclaration;
var constantValue;
if (declaration.kind === 192 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) {
return constantValue;
}
}
return undefined;
}
function writeTypeAtLocation(location, enclosingDeclaration, flags, writer) {
var symbol = getSymbolOfNode(location);
var type = symbol && !(symbol.flags & 2048 /* TypeLiteral */) ? getTypeOfSymbol(symbol) : getTypeFromTypeNode(location);
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
}
function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) {
var signature = getSignatureFromDeclaration(signatureDeclaration);
getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags);
}
function invokeEmitter(targetSourceFile) {
var resolver = {
getProgram: function () { return program; },
getLocalNameOfContainer: getLocalNameOfContainer,
getExpressionNamePrefix: getExpressionNamePrefix,
getExportAssignmentName: getExportAssignmentName,
isReferencedImportDeclaration: isReferencedImportDeclaration,
getNodeCheckFlags: getNodeCheckFlags,
getEnumMemberValue: getEnumMemberValue,
isTopLevelValueImportWithEntityName: isTopLevelValueImportWithEntityName,
hasSemanticErrors: hasSemanticErrors,
hasEarlyErrors: hasEarlyErrors,
isDeclarationVisible: isDeclarationVisible,
isImplementationOfOverload: isImplementationOfOverload,
writeTypeAtLocation: writeTypeAtLocation,
writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration,
isSymbolAccessible: isSymbolAccessible,
isImportDeclarationEntityNameReferenceDeclarationVisibile: isImportDeclarationEntityNameReferenceDeclarationVisibile,
getConstantValue: getConstantValue
};
checkProgram();
return ts.emitFiles(resolver, targetSourceFile);
}
function initializeTypeChecker() {
ts.forEach(program.getSourceFiles(), function (file) {
ts.bindSourceFile(file);
ts.forEach(file.semanticErrors, addDiagnostic);
});
ts.forEach(program.getSourceFiles(), function (file) {
if (!ts.isExternalModule(file)) {
extendSymbolTable(globals, file.locals);
}
});
getSymbolLinks(undefinedSymbol).type = undefinedType;
getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments");
getSymbolLinks(unknownSymbol).type = unknownType;
globals[undefinedSymbol.name] = undefinedSymbol;
globalArraySymbol = getGlobalSymbol("Array");
globalArrayType = getTypeOfGlobalSymbol(globalArraySymbol, 1);
globalObjectType = getGlobalType("Object");
globalFunctionType = getGlobalType("Function");
globalStringType = getGlobalType("String");
globalNumberType = getGlobalType("Number");
globalBooleanType = getGlobalType("Boolean");
globalRegExpType = getGlobalType("RegExp");
globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
}
initializeTypeChecker();
return checker;
}
ts.createTypeChecker = createTypeChecker;
})(ts || (ts = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.DiagnosticCode = {
error_TS_0_1: "error TS{0}: {1}",
warning_TS_0_1: "warning TS{0}: {1}",
Unrecognized_escape_sequence: "Unrecognized escape sequence.",
Unexpected_character_0: "Unexpected character {0}.",
Missing_close_quote_character: "Missing close quote character.",
Identifier_expected: "Identifier expected.",
_0_keyword_expected: "'{0}' keyword expected.",
_0_expected: "'{0}' expected.",
Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.",
Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.",
Unexpected_token_0_expected: "Unexpected token; '{0}' expected.",
Trailing_comma_not_allowed: "Trailing comma not allowed.",
public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.",
Unexpected_token: "Unexpected token.",
Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.",
A_rest_parameter_must_be_last_in_a_parameter_list: "A rest parameter must be last in a parameter list.",
Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.",
A_required_parameter_cannot_follow_an_optional_parameter: "A required parameter cannot follow an optional parameter.",
Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.",
Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.",
Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.",
Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.",
Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.",
Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.",
Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.",
extends_clause_already_seen: "'extends' clause already seen.",
extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.",
Classes_can_only_extend_a_single_class: "Classes can only extend a single class.",
implements_clause_already_seen: "'implements' clause already seen.",
Accessibility_modifier_already_seen: "Accessibility modifier already seen.",
_0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.",
_0_modifier_already_seen: "'{0}' modifier already seen.",
_0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.",
Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.",
super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.",
Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.",
Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.",
A_function_implementation_cannot_be_declared_in_an_ambient_context: "A function implementation cannot be declared in an ambient context.",
A_declare_modifier_cannot_be_used_in_an_already_ambient_context: "A 'declare' modifier cannot be used in an already ambient context.",
Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.",
_0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.",
A_declare_modifier_cannot_be_used_with_an_interface_declaration: "A 'declare' modifier cannot be used with an interface declaration.",
A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: "A 'declare' modifier is required for a top level declaration in a .d.ts file.",
A_rest_parameter_cannot_be_optional: "A rest parameter cannot be optional.",
A_rest_parameter_cannot_have_an_initializer: "A rest parameter cannot have an initializer.",
set_accessor_must_have_exactly_one_parameter: "'set' accessor must have exactly one parameter.",
set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.",
set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.",
set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.",
get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.",
Modifiers_cannot_appear_here: "Modifiers cannot appear here.",
Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.",
Enum_member_must_have_initializer: "Enum member must have initializer.",
Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.",
Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.",
module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement",
constructor_function_accessor_or_variable: "constructor, function, accessor or variable",
statement: "statement",
case_or_default_clause: "case or default clause",
identifier: "identifier",
call_construct_index_property_or_function_signature: "call, construct, index, property or function signature",
expression: "expression",
type_name: "type name",
property_or_accessor: "property or accessor",
parameter: "parameter",
type: "type",
type_parameter: "type parameter",
A_declare_modifier_cannot_be_used_with_an_import_declaration: "A 'declare' modifier cannot be used with an import declaration.",
Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.",
Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.",
Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.",
_0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.",
_0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.",
Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.",
Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.",
Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.",
Type_parameters_cannot_appear_on_an_accessor: "Type parameters cannot appear on an accessor.",
Type_annotation_cannot_appear_on_a_set_accessor: "Type annotation cannot appear on a 'set' accessor.",
Index_signature_must_have_exactly_one_parameter: "Index signature must have exactly one parameter.",
_0_list_cannot_be_empty: "'{0}' list cannot be empty.",
variable_declaration: "variable declaration",
type_argument: "type argument",
Invalid_use_of_0_in_strict_mode: "Invalid use of '{0}' in strict mode.",
with_statements_are_not_allowed_in_strict_mode: "'with' statements are not allowed in strict mode.",
delete_cannot_be_called_on_an_identifier_in_strict_mode: "'delete' cannot be called on an identifier in strict mode.",
Invalid_left_hand_side_in_for_in_statement: "Invalid left-hand side in 'for...in' statement.",
continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.",
break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.",
Jump_target_not_found: "Jump target not found.",
Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.",
return_statement_must_be_contained_within_a_function_body: "'return' statement must be contained within a function body.",
Expression_expected: "Expression expected.",
Type_expected: "Type expected.",
Template_literal_cannot_be_used_as_an_element_name: "Template literal cannot be used as an element name.",
Computed_property_names_cannot_be_used_here: "Computed property names cannot be used here.",
Duplicate_identifier_0: "Duplicate identifier '{0}'.",
The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.",
The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.",
super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.",
The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.",
Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?",
Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.",
Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.",
An_index_expression_argument_must_be_string_number_or_any: "An index expression argument must be 'string', 'number', or 'any'.",
Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.",
Type_0_is_not_assignable_to_type_1: "Type '{0}' is not assignable to type '{1}'.",
Type_0_is_not_assignable_to_type_1_NL_2: "Type '{0}' is not assignable to type '{1}':{NL}{2}",
Expected_var_class_interface_or_module: "Expected var, class, interface, or module.",
Getter_0_already_declared: "Getter '{0}' already declared.",
Setter_0_already_declared: "Setter '{0}' already declared.",
Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.",
Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.",
Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.",
Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.",
Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.",
Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.",
Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.",
Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.",
Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.",
Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.",
Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.",
Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.",
Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.",
Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.",
Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.",
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.",
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.",
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.",
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.",
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.",
Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.",
Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.",
Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.",
Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.",
Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.",
Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.",
Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.",
Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}",
Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.",
Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.",
Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.",
Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.",
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.",
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.",
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.",
Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.",
Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.",
Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.",
Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.",
Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.",
Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.",
Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.",
Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.",
Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.",
Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.",
Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.",
Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.",
Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.",
Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.",
Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.",
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.",
A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.",
Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.",
Cannot_find_external_module_0: "Cannot find external module '{0}'.",
Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.",
A_class_may_only_extend_another_class: "A class may only extend another class.",
A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.",
An_interface_may_only_extend_a_class_or_another_interface: "An interface may only extend a class or another interface.",
Unable_to_resolve_type: "Unable to resolve type.",
Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.",
Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.",
Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.",
Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.",
Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}",
Cannot_use_new_with_an_expression_whose_type_lacks_a_signature: "Cannot use 'new' with an expression whose type lacks a signature.",
Only_a_void_function_can_be_called_with_the_new_keyword: "Only a void function can be called with the 'new' keyword.",
Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.",
Type_0_does_not_satisfy_the_constraint_1: "Type '{0}' does not satisfy the constraint '{1}'.",
Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.",
Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.",
Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.",
Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).",
Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.",
Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.",
Property_0_does_not_exist_on_value_of_type_1: "Property '{0}' does not exist on value of type '{1}'.",
Cannot_find_name_0: "Cannot find name '{0}'.",
get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.",
this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.",
Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.",
Type_0_recursively_references_itself_as_a_base_type: "Type '{0}' recursively references itself as a base type.",
super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.",
super_can_only_be_referenced_in_a_derived_class: "'super' can only be referenced in a derived class.",
A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.",
Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.",
Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.",
_0_1_is_inaccessible: "'{0}.{1}' is inaccessible.",
this_cannot_be_referenced_in_a_module_body: "'this' cannot be referenced in a module body.",
Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.",
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.",
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.",
An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: "An arithmetic operand must be of type 'any', 'number' or an enum type.",
Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.",
Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.",
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.",
The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.",
The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.",
The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.",
The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.",
Setters_cannot_return_a_value: "Setters cannot return a value.",
Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.",
Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.",
Type_0_is_not_generic: "Type '{0}' is not generic.",
Getters_must_return_a_value: "Getters must return a value.",
Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.",
Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.",
Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.",
Cannot_resolve_return_type_reference: "Cannot resolve return type reference.",
Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.",
Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.",
All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.",
Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.",
Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}",
Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}",
The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.",
this_cannot_be_referenced_in_a_static_property_initializer: "'this' cannot be referenced in a static property initializer.",
Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}",
Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}",
Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}",
Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.",
Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}",
Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.",
Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.",
Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.",
Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.",
Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.",
this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.",
Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.",
Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.",
Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.",
A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.",
A_rest_parameter_must_be_of_an_array_type: "A rest parameter must be of an array type.",
Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.",
Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.",
Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.",
Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.",
Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.",
Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}",
All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.",
All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}",
All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.",
All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}",
A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: "A parameter initializer is only allowed in a function or constructor implementation.",
Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.",
Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.",
Module_0_has_no_exported_member_1: "Module '{0}' has no exported member '{1}'.",
Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.",
Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.",
Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.",
Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.",
Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.",
Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.",
Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.",
Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.",
Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.",
Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.",
Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}",
Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.",
Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.",
All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.",
super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.",
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.",
Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.",
Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.",
Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.",
No_best_common_type_exists_among_return_expressions: "No best common type exists among return expressions.",
Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.",
Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.",
Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.",
Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.",
Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.",
TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.",
TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.",
TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.",
TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.",
TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.",
TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.",
TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.",
TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}",
TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.",
TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.",
TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.",
TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.",
TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.",
TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.",
TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.",
TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.",
Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.",
Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.",
No_best_common_type_exists_between_0_and_1: "No best common type exists between '{0}' and '{1}'.",
No_best_common_type_exists_between_0_1_and_2: "No best common type exists between '{0}', '{1}', and '{2}'.",
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.",
Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.",
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.",
Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.",
Duplicate_string_index_signature: "Duplicate string index signature.",
Duplicate_number_index_signature: "Duplicate number index signature.",
All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.",
Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.",
Neither_type_0_nor_type_1_is_assignable_to_the_other: "Neither type '{0}' nor type '{1}' is assignable to the other.",
Neither_type_0_nor_type_1_is_assignable_to_the_other_NL_2: "Neither type '{0}' nor type '{1}' is assignable to the other:{NL}{2}",
Duplicate_function_implementation: "Duplicate function implementation.",
Function_implementation_expected: "Function implementation expected.",
Function_overload_name_must_be_0: "Function overload name must be '{0}'.",
Constructor_implementation_expected: "Constructor implementation expected.",
Class_name_cannot_be_0: "Class name cannot be '{0}'.",
Interface_name_cannot_be_0: "Interface name cannot be '{0}'.",
Enum_name_cannot_be_0: "Enum name cannot be '{0}'.",
A_module_cannot_have_multiple_export_assignments: "A module cannot have multiple export assignments.",
Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.",
A_parameter_property_is_only_allowed_in_a_constructor_implementation: "A parameter property is only allowed in a constructor implementation.",
Function_overload_must_be_static: "Function overload must be static.",
Function_overload_must_not_be_static: "Function overload must not be static.",
Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.",
Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.",
Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}",
Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.",
Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.",
Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.",
Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.",
Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}",
Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.",
Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.",
Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}",
Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.",
Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.",
Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}",
Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.",
Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.",
Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.",
Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.",
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.",
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.",
Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.",
Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}",
Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.",
Type_reference_must_refer_to_type: "Type reference must refer to type.",
In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.",
_0_overload_s: " (+ {0} overload(s))",
Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.",
Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.",
Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.",
Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.",
Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.",
Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}",
Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.",
Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.",
Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.",
Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}",
Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}",
Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}",
Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.",
Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.",
Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.",
Current_host_does_not_support_0_option: "Current host does not support '{0}' option.",
ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'",
Argument_for_0_option_must_be_1_or_2: "Argument for '{0}' option must be '{1}' or '{2}'",
Could_not_find_file_0: "Could not find file: '{0}'.",
A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.",
Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.",
Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.",
Emit_Error_0: "Emit Error: {0}.",
Cannot_read_file_0_1: "Cannot read file '{0}': {1}",
Unsupported_file_encoding: "Unsupported file encoding.",
Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'.",
Unsupported_locale_0: "Unsupported locale: '{0}'.",
Execution_Failed_NL: "Execution Failed.{NL}",
Invalid_call_to_up: "Invalid call to 'up'",
Invalid_call_to_down: "Invalid call to 'down'",
Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.",
Unknown_compiler_option_0: "Unknown compiler option '{0}'",
Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.",
Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}",
Could_not_delete_file_0: "Could not delete file '{0}'",
Could_not_create_directory_0: "Could not create directory '{0}'",
Error_while_executing_file_0: "Error while executing file '{0}': ",
Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.",
Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.",
Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.",
Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.",
Option_0_specified_without_1: "Option '{0}' specified without '{1}'",
codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.",
Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.",
Generates_corresponding_0_file: "Generates corresponding {0} file.",
Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.",
Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.",
Watch_input_files: "Watch input files.",
Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.",
Do_not_emit_comments_to_output: "Do not emit comments to output.",
Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.",
Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'",
Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'",
Print_this_message: "Print this message.",
Print_the_compiler_s_version_0: "Print the compiler's version: {0}",
Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.",
Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'",
Syntax_0: "Syntax: {0}",
options: "options",
file1: "file",
Examples: "Examples:",
Options: "Options:",
Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.",
Version_0: "Version {0}",
Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.",
NL_Recompiling_0: "{NL}Recompiling ({0}):",
STRING: "STRING",
KIND: "KIND",
file2: "FILE",
VERSION: "VERSION",
LOCATION: "LOCATION",
DIRECTORY: "DIRECTORY",
NUMBER: "NUMBER",
Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.",
Additional_locations: "Additional locations:",
This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.",
Unknown_rule: "Unknown rule.",
Invalid_line_number_0: "Invalid line number ({0})",
Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.",
Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.",
Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.",
Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.",
Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.",
new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.",
_0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.",
Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.",
Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.",
Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.",
Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.",
Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.",
_0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.",
Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.",
Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening."
};
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (DiagnosticCategory) {
DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix";
})(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {}));
var DiagnosticCategory = TypeScript.DiagnosticCategory;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.diagnosticInformationMap = {
"error TS{0}: {1}": { "code": 0, "category": 3 /* NoPrefix */ },
"warning TS{0}: {1}": { "code": 1, "category": 3 /* NoPrefix */ },
"Unrecognized escape sequence.": { "code": 1000, "category": 1 /* Error */ },
"Unexpected character {0}.": { "code": 1001, "category": 1 /* Error */ },
"Missing close quote character.": { "code": 1002, "category": 1 /* Error */ },
"Identifier expected.": { "code": 1003, "category": 1 /* Error */ },
"'{0}' keyword expected.": { "code": 1004, "category": 1 /* Error */ },
"'{0}' expected.": { "code": 1005, "category": 1 /* Error */ },
"Identifier expected; '{0}' is a keyword.": { "code": 1006, "category": 1 /* Error */ },
"Automatic semicolon insertion not allowed.": { "code": 1007, "category": 1 /* Error */ },
"Unexpected token; '{0}' expected.": { "code": 1008, "category": 1 /* Error */ },
"Trailing comma not allowed.": { "code": 1009, "category": 1 /* Error */ },
"'*/' expected.": { "code": 1010, "category": 1 /* Error */ },
"'public' or 'private' modifier must precede 'static'.": { "code": 1011, "category": 1 /* Error */ },
"Unexpected token.": { "code": 1012, "category": 1 /* Error */ },
"Catch clause parameter cannot have a type annotation.": { "code": 1013, "category": 1 /* Error */ },
"A rest parameter must be last in a parameter list.": { "code": 1014, "category": 1 /* Error */ },
"Parameter cannot have question mark and initializer.": { "code": 1015, "category": 1 /* Error */ },
"A required parameter cannot follow an optional parameter.": { "code": 1016, "category": 1 /* Error */ },
"Index signatures cannot have rest parameters.": { "code": 1017, "category": 1 /* Error */ },
"Index signature parameter cannot have accessibility modifiers.": { "code": 1018, "category": 1 /* Error */ },
"Index signature parameter cannot have a question mark.": { "code": 1019, "category": 1 /* Error */ },
"Index signature parameter cannot have an initializer.": { "code": 1020, "category": 1 /* Error */ },
"Index signature must have a type annotation.": { "code": 1021, "category": 1 /* Error */ },
"Index signature parameter must have a type annotation.": { "code": 1022, "category": 1 /* Error */ },
"Index signature parameter type must be 'string' or 'number'.": { "code": 1023, "category": 1 /* Error */ },
"'extends' clause already seen.": { "code": 1024, "category": 1 /* Error */ },
"'extends' clause must precede 'implements' clause.": { "code": 1025, "category": 1 /* Error */ },
"Classes can only extend a single class.": { "code": 1026, "category": 1 /* Error */ },
"'implements' clause already seen.": { "code": 1027, "category": 1 /* Error */ },
"Accessibility modifier already seen.": { "code": 1028, "category": 1 /* Error */ },
"'{0}' modifier must precede '{1}' modifier.": { "code": 1029, "category": 1 /* Error */ },
"'{0}' modifier already seen.": { "code": 1030, "category": 1 /* Error */ },
"'{0}' modifier cannot appear on a class element.": { "code": 1031, "category": 1 /* Error */ },
"Interface declaration cannot have 'implements' clause.": { "code": 1032, "category": 1 /* Error */ },
"'super' invocation cannot have type arguments.": { "code": 1034, "category": 1 /* Error */ },
"Only ambient modules can use quoted names.": { "code": 1035, "category": 1 /* Error */ },
"Statements are not allowed in ambient contexts.": { "code": 1036, "category": 1 /* Error */ },
"A function implementation cannot be declared in an ambient context.": { "code": 1037, "category": 1 /* Error */ },
"A 'declare' modifier cannot be used in an already ambient context.": { "code": 1038, "category": 1 /* Error */ },
"Initializers are not allowed in ambient contexts.": { "code": 1039, "category": 1 /* Error */ },
"'{0}' modifier cannot appear on a module element.": { "code": 1044, "category": 1 /* Error */ },
"A 'declare' modifier cannot be used with an interface declaration.": { "code": 1045, "category": 1 /* Error */ },
"A 'declare' modifier is required for a top level declaration in a .d.ts file.": { "code": 1046, "category": 1 /* Error */ },
"A rest parameter cannot be optional.": { "code": 1047, "category": 1 /* Error */ },
"A rest parameter cannot have an initializer.": { "code": 1048, "category": 1 /* Error */ },
"'set' accessor must have exactly one parameter.": { "code": 1049, "category": 1 /* Error */ },
"'set' accessor parameter cannot be optional.": { "code": 1051, "category": 1 /* Error */ },
"'set' accessor parameter cannot have an initializer.": { "code": 1052, "category": 1 /* Error */ },
"'set' accessor cannot have rest parameter.": { "code": 1053, "category": 1 /* Error */ },
"'get' accessor cannot have parameters.": { "code": 1054, "category": 1 /* Error */ },
"Modifiers cannot appear here.": { "code": 1055, "category": 1 /* Error */ },
"Accessors are only available when targeting ECMAScript 5 and higher.": { "code": 1056, "category": 1 /* Error */ },
"Enum member must have initializer.": { "code": 1061, "category": 1 /* Error */ },
"Export assignment cannot be used in internal modules.": { "code": 1063, "category": 1 /* Error */ },
"Ambient enum elements can only have integer literal initializers.": { "code": 1066, "category": 1 /* Error */ },
"module, class, interface, enum, import or statement": { "code": 1067, "category": 3 /* NoPrefix */ },
"constructor, function, accessor or variable": { "code": 1068, "category": 3 /* NoPrefix */ },
"statement": { "code": 1069, "category": 3 /* NoPrefix */ },
"case or default clause": { "code": 1070, "category": 3 /* NoPrefix */ },
"identifier": { "code": 1071, "category": 3 /* NoPrefix */ },
"call, construct, index, property or function signature": { "code": 1072, "category": 3 /* NoPrefix */ },
"expression": { "code": 1073, "category": 3 /* NoPrefix */ },
"type name": { "code": 1074, "category": 3 /* NoPrefix */ },
"property or accessor": { "code": 1075, "category": 3 /* NoPrefix */ },
"parameter": { "code": 1076, "category": 3 /* NoPrefix */ },
"type": { "code": 1077, "category": 3 /* NoPrefix */ },
"type parameter": { "code": 1078, "category": 3 /* NoPrefix */ },
"A 'declare' modifier cannot be used with an import declaration.": { "code": 1079, "category": 1 /* Error */ },
"Invalid 'reference' directive syntax.": { "code": 1084, "category": 1 /* Error */ },
"Octal literals are not available when targeting ECMAScript 5 and higher.": { "code": 1085, "category": 1 /* Error */ },
"Accessors are not allowed in ambient contexts.": { "code": 1086, "category": 1 /* Error */ },
"'{0}' modifier cannot appear on a constructor declaration.": { "code": 1089, "category": 1 /* Error */ },
"'{0}' modifier cannot appear on a parameter.": { "code": 1090, "category": 1 /* Error */ },
"Only a single variable declaration is allowed in a 'for...in' statement.": { "code": 1091, "category": 1 /* Error */ },
"Type parameters cannot appear on a constructor declaration.": { "code": 1092, "category": 1 /* Error */ },
"Type annotation cannot appear on a constructor declaration.": { "code": 1093, "category": 1 /* Error */ },
"Type parameters cannot appear on an accessor.": { "code": 1094, "category": 1 /* Error */ },
"Type annotation cannot appear on a 'set' accessor.": { "code": 1095, "category": 1 /* Error */ },
"Index signature must have exactly one parameter.": { "code": 1096, "category": 1 /* Error */ },
"'{0}' list cannot be empty.": { "code": 1097, "category": 1 /* Error */ },
"variable declaration": { "code": 1098, "category": 3 /* NoPrefix */ },
"type argument": { "code": 1099, "category": 3 /* NoPrefix */ },
"Invalid use of '{0}' in strict mode.": { "code": 1100, "category": 1 /* Error */ },
"'with' statements are not allowed in strict mode.": { "code": 1101, "category": 1 /* Error */ },
"'delete' cannot be called on an identifier in strict mode.": { "code": 1102, "category": 1 /* Error */ },
"Invalid left-hand side in 'for...in' statement.": { "code": 1103, "category": 1 /* Error */ },
"'continue' statement can only be used within an enclosing iteration statement.": { "code": 1104, "category": 1 /* Error */ },
"'break' statement can only be used within an enclosing iteration or switch statement.": { "code": 1105, "category": 1 /* Error */ },
"Jump target not found.": { "code": 1106, "category": 1 /* Error */ },
"Jump target cannot cross function boundary.": { "code": 1107, "category": 1 /* Error */ },
"'return' statement must be contained within a function body.": { "code": 1108, "category": 1 /* Error */ },
"Expression expected.": { "code": 1109, "category": 1 /* Error */ },
"Type expected.": { "code": 1110, "category": 1 /* Error */ },
"Template literal cannot be used as an element name.": { "code": 1111, "category": 1 /* Error */ },
"Computed property names cannot be used here.": { "code": 1112, "category": 1 /* Error */ },
"Duplicate identifier '{0}'.": { "code": 2000, "category": 1 /* Error */ },
"The name '{0}' does not exist in the current scope.": { "code": 2001, "category": 1 /* Error */ },
"The name '{0}' does not refer to a value.": { "code": 2002, "category": 1 /* Error */ },
"'super' can only be used inside a class instance method.": { "code": 2003, "category": 1 /* Error */ },
"The left-hand side of an assignment expression must be a variable, property or indexer.": { "code": 2004, "category": 1 /* Error */ },
"Value of type '{0}' is not callable. Did you mean to include 'new'?": { "code": 2161, "category": 1 /* Error */ },
"Value of type '{0}' is not callable.": { "code": 2006, "category": 1 /* Error */ },
"Value of type '{0}' is not newable.": { "code": 2007, "category": 1 /* Error */ },
"An index expression argument must be 'string', 'number', or 'any'.": { "code": 2008, "category": 1 /* Error */ },
"Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { "code": 2009, "category": 1 /* Error */ },
"Type '{0}' is not assignable to type '{1}'.": { "code": 2011, "category": 1 /* Error */ },
"Type '{0}' is not assignable to type '{1}':{NL}{2}": { "code": 2012, "category": 1 /* Error */ },
"Expected var, class, interface, or module.": { "code": 2013, "category": 1 /* Error */ },
"Getter '{0}' already declared.": { "code": 2015, "category": 1 /* Error */ },
"Setter '{0}' already declared.": { "code": 2016, "category": 1 /* Error */ },
"Exported class '{0}' extends private class '{1}'.": { "code": 2018, "category": 1 /* Error */ },
"Exported class '{0}' implements private interface '{1}'.": { "code": 2019, "category": 1 /* Error */ },
"Exported interface '{0}' extends private interface '{1}'.": { "code": 2020, "category": 1 /* Error */ },
"Exported class '{0}' extends class from inaccessible module {1}.": { "code": 2021, "category": 1 /* Error */ },
"Exported class '{0}' implements interface from inaccessible module {1}.": { "code": 2022, "category": 1 /* Error */ },
"Exported interface '{0}' extends interface from inaccessible module {1}.": { "code": 2023, "category": 1 /* Error */ },
"Public static property '{0}' of exported class has or is using private type '{1}'.": { "code": 2024, "category": 1 /* Error */ },
"Public property '{0}' of exported class has or is using private type '{1}'.": { "code": 2025, "category": 1 /* Error */ },
"Property '{0}' of exported interface has or is using private type '{1}'.": { "code": 2026, "category": 1 /* Error */ },
"Exported variable '{0}' has or is using private type '{1}'.": { "code": 2027, "category": 1 /* Error */ },
"Public static property '{0}' of exported class is using inaccessible module {1}.": { "code": 2028, "category": 1 /* Error */ },
"Public property '{0}' of exported class is using inaccessible module {1}.": { "code": 2029, "category": 1 /* Error */ },
"Property '{0}' of exported interface is using inaccessible module {1}.": { "code": 2030, "category": 1 /* Error */ },
"Exported variable '{0}' is using inaccessible module {1}.": { "code": 2031, "category": 1 /* Error */ },
"Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": { "code": 2032, "category": 1 /* Error */ },
"Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": { "code": 2033, "category": 1 /* Error */ },
"Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": { "code": 2034, "category": 1 /* Error */ },
"Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { "code": 2035, "category": 1 /* Error */ },
"Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { "code": 2036, "category": 1 /* Error */ },
"Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": { "code": 2037, "category": 1 /* Error */ },
"Parameter '{0}' of public method from exported class has or is using private type '{1}'.": { "code": 2038, "category": 1 /* Error */ },
"Parameter '{0}' of method from exported interface has or is using private type '{1}'.": { "code": 2039, "category": 1 /* Error */ },
"Parameter '{0}' of exported function has or is using private type '{1}'.": { "code": 2040, "category": 1 /* Error */ },
"Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": { "code": 2041, "category": 1 /* Error */ },
"Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": { "code": 2042, "category": 1 /* Error */ },
"Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": { "code": 2043, "category": 1 /* Error */ },
"Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { "code": 2044, "category": 1 /* Error */ },
"Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": { "code": 2045, "category": 1 /* Error */ },
"Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": { "code": 2046, "category": 1 /* Error */ },
"Parameter '{0}' of public method from exported class is using inaccessible module {1}.": { "code": 2047, "category": 1 /* Error */ },
"Parameter '{0}' of method from exported interface is using inaccessible module {1}.": { "code": 2048, "category": 1 /* Error */ },
"Parameter '{0}' of exported function is using inaccessible module {1}.": { "code": 2049, "category": 1 /* Error */ },
"Return type of public static property getter from exported class has or is using private type '{0}'.": { "code": 2050, "category": 1 /* Error */ },
"Return type of public property getter from exported class has or is using private type '{0}'.": { "code": 2051, "category": 1 /* Error */ },
"Return type of constructor signature from exported interface has or is using private type '{0}'.": { "code": 2052, "category": 1 /* Error */ },
"Return type of call signature from exported interface has or is using private type '{0}'.": { "code": 2053, "category": 1 /* Error */ },
"Return type of index signature from exported interface has or is using private type '{0}'.": { "code": 2054, "category": 1 /* Error */ },
"Return type of public static method from exported class has or is using private type '{0}'.": { "code": 2055, "category": 1 /* Error */ },
"Return type of public method from exported class has or is using private type '{0}'.": { "code": 2056, "category": 1 /* Error */ },
"Return type of method from exported interface has or is using private type '{0}'.": { "code": 2057, "category": 1 /* Error */ },
"Return type of exported function has or is using private type '{0}'.": { "code": 2058, "category": 1 /* Error */ },
"Return type of public static property getter from exported class is using inaccessible module {0}.": { "code": 2059, "category": 1 /* Error */ },
"Return type of public property getter from exported class is using inaccessible module {0}.": { "code": 2060, "category": 1 /* Error */ },
"Return type of constructor signature from exported interface is using inaccessible module {0}.": { "code": 2061, "category": 1 /* Error */ },
"Return type of call signature from exported interface is using inaccessible module {0}.": { "code": 2062, "category": 1 /* Error */ },
"Return type of index signature from exported interface is using inaccessible module {0}.": { "code": 2063, "category": 1 /* Error */ },
"Return type of public static method from exported class is using inaccessible module {0}.": { "code": 2064, "category": 1 /* Error */ },
"Return type of public method from exported class is using inaccessible module {0}.": { "code": 2065, "category": 1 /* Error */ },
"Return type of method from exported interface is using inaccessible module {0}.": { "code": 2066, "category": 1 /* Error */ },
"Return type of exported function is using inaccessible module {0}.": { "code": 2067, "category": 1 /* Error */ },
"'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.": { "code": 2068, "category": 1 /* Error */ },
"A parameter list must follow a generic type argument list. '(' expected.": { "code": 2069, "category": 1 /* Error */ },
"Multiple constructor implementations are not allowed.": { "code": 2070, "category": 1 /* Error */ },
"Cannot find external module '{0}'.": { "code": 2071, "category": 1 /* Error */ },
"Module cannot be aliased to a non-module type.": { "code": 2072, "category": 1 /* Error */ },
"A class may only extend another class.": { "code": 2073, "category": 1 /* Error */ },
"A class may only implement another class or interface.": { "code": 2074, "category": 1 /* Error */ },
"An interface may only extend a class or another interface.": { "code": 2075, "category": 1 /* Error */ },
"Unable to resolve type.": { "code": 2077, "category": 1 /* Error */ },
"Unable to resolve type of '{0}'.": { "code": 2078, "category": 1 /* Error */ },
"Unable to resolve type parameter constraint.": { "code": 2079, "category": 1 /* Error */ },
"Type parameter constraint cannot be a primitive type.": { "code": 2080, "category": 1 /* Error */ },
"Supplied parameters do not match any signature of call target.": { "code": 2081, "category": 1 /* Error */ },
"Supplied parameters do not match any signature of call target:{NL}{0}": { "code": 2082, "category": 1 /* Error */ },
"Cannot use 'new' with an expression whose type lacks a signature.": { "code": 2083, "category": 1 /* Error */ },
"Only a void function can be called with the 'new' keyword.": { "code": 2084, "category": 1 /* Error */ },
"Could not select overload for 'new' expression.": { "code": 2085, "category": 1 /* Error */ },
"Type '{0}' does not satisfy the constraint '{1}'.": { "code": 2086, "category": 1 /* Error */ },
"Could not select overload for 'call' expression.": { "code": 2087, "category": 1 /* Error */ },
"Cannot invoke an expression whose type lacks a call signature.": { "code": 2088, "category": 1 /* Error */ },
"Calls to 'super' are only valid inside a class.": { "code": 2089, "category": 1 /* Error */ },
"Generic type '{0}' requires {1} type argument(s).": { "code": 2090, "category": 1 /* Error */ },
"Type of array literal cannot be determined. Best common type could not be found for array elements.": { "code": 2092, "category": 1 /* Error */ },
"Could not find enclosing symbol for dotted name '{0}'.": { "code": 2093, "category": 1 /* Error */ },
"Property '{0}' does not exist on value of type '{1}'.": { "code": 2094, "category": 1 /* Error */ },
"Cannot find name '{0}'.": { "code": 2095, "category": 1 /* Error */ },
"'get' and 'set' accessor must have the same type.": { "code": 2096, "category": 1 /* Error */ },
"'this' cannot be referenced in current location.": { "code": 2097, "category": 1 /* Error */ },
"Static members cannot reference class type parameters.": { "code": 2099, "category": 1 /* Error */ },
"Type '{0}' recursively references itself as a base type.": { "code": 2100, "category": 1 /* Error */ },
"'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { "code": 2102, "category": 1 /* Error */ },
"'super' can only be referenced in a derived class.": { "code": 2103, "category": 1 /* Error */ },
"A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { "code": 2104, "category": 1 /* Error */ },
"Constructors for derived classes must contain a 'super' call.": { "code": 2105, "category": 1 /* Error */ },
"Super calls are not permitted outside constructors or in nested functions inside constructors.": { "code": 2106, "category": 1 /* Error */ },
"'{0}.{1}' is inaccessible.": { "code": 2107, "category": 1 /* Error */ },
"'this' cannot be referenced in a module body.": { "code": 2108, "category": 1 /* Error */ },
"Invalid '+' expression - types not known to support the addition operator.": { "code": 2111, "category": 1 /* Error */ },
"The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { "code": 2112, "category": 1 /* Error */ },
"The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { "code": 2113, "category": 1 /* Error */ },
"An arithmetic operand must be of type 'any', 'number' or an enum type.": { "code": 2114, "category": 1 /* Error */ },
"Variable declarations of a 'for' statement cannot use a type annotation.": { "code": 2115, "category": 1 /* Error */ },
"Variable declarations of a 'for' statement must be of types 'string' or 'any'.": { "code": 2116, "category": 1 /* Error */ },
"The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { "code": 2117, "category": 1 /* Error */ },
"The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { "code": 2118, "category": 1 /* Error */ },
"The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": { "code": 2119, "category": 1 /* Error */ },
"The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { "code": 2120, "category": 1 /* Error */ },
"The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { "code": 2121, "category": 1 /* Error */ },
"Setters cannot return a value.": { "code": 2122, "category": 1 /* Error */ },
"Tried to query type of uninitialized module '{0}'.": { "code": 2123, "category": 1 /* Error */ },
"Tried to set variable type to uninitialized module type '{0}'.": { "code": 2124, "category": 1 /* Error */ },
"Type '{0}' is not generic.": { "code": 2125, "category": 1 /* Error */ },
"Getters must return a value.": { "code": 2126, "category": 1 /* Error */ },
"Getter and setter accessors do not agree in visibility.": { "code": 2127, "category": 1 /* Error */ },
"Invalid left-hand side of assignment expression.": { "code": 2130, "category": 1 /* Error */ },
"Function declared a non-void return type, but has no return expression.": { "code": 2131, "category": 1 /* Error */ },
"Cannot resolve return type reference.": { "code": 2132, "category": 1 /* Error */ },
"Constructors cannot have a return type of 'void'.": { "code": 2133, "category": 1 /* Error */ },
"Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { "code": 2134, "category": 1 /* Error */ },
"All symbols within a with block will be resolved to 'any'.": { "code": 2135, "category": 1 /* Error */ },
"Import declarations in an internal module cannot reference an external module.": { "code": 2136, "category": 1 /* Error */ },
"Class {0} declares interface {1} but does not implement it:{NL}{2}": { "code": 2137, "category": 1 /* Error */ },
"Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": { "code": 2138, "category": 1 /* Error */ },
"The operand of an increment or decrement operator must be a variable, property or indexer.": { "code": 2139, "category": 1 /* Error */ },
"'this' cannot be referenced in a static property initializer.": { "code": 2140, "category": 1 /* Error */ },
"Class '{0}' cannot extend class '{1}':{NL}{2}": { "code": 2141, "category": 1 /* Error */ },
"Interface '{0}' cannot extend class '{1}':{NL}{2}": { "code": 2142, "category": 1 /* Error */ },
"Interface '{0}' cannot extend interface '{1}':{NL}{2}": { "code": 2143, "category": 1 /* Error */ },
"Overload signature is not compatible with function definition.": { "code": 2148, "category": 1 /* Error */ },
"Overload signature is not compatible with function definition:{NL}{0}": { "code": 2149, "category": 1 /* Error */ },
"Overload signatures must all be public or private.": { "code": 2150, "category": 1 /* Error */ },
"Overload signatures must all be exported or not exported.": { "code": 2151, "category": 1 /* Error */ },
"Overload signatures must all be ambient or non-ambient.": { "code": 2152, "category": 1 /* Error */ },
"Overload signatures must all be optional or required.": { "code": 2153, "category": 1 /* Error */ },
"Specialized overload signature is not assignable to any non-specialized signature.": { "code": 2154, "category": 1 /* Error */ },
"'this' cannot be referenced in constructor arguments.": { "code": 2155, "category": 1 /* Error */ },
"Instance member cannot be accessed off a class.": { "code": 2157, "category": 1 /* Error */ },
"Untyped function calls may not accept type arguments.": { "code": 2158, "category": 1 /* Error */ },
"Non-generic functions may not accept type arguments.": { "code": 2159, "category": 1 /* Error */ },
"A generic type may not reference itself with a wrapped form of its own type parameters.": { "code": 2160, "category": 1 /* Error */ },
"A rest parameter must be of an array type.": { "code": 2162, "category": 1 /* Error */ },
"Overload signature implementation cannot use specialized type.": { "code": 2163, "category": 1 /* Error */ },
"Export assignments may only be used at the top-level of external modules.": { "code": 2164, "category": 1 /* Error */ },
"Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": { "code": 2165, "category": 1 /* Error */ },
"Only public methods of the base class are accessible via the 'super' keyword.": { "code": 2166, "category": 1 /* Error */ },
"Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": { "code": 2167, "category": 1 /* Error */ },
"Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": { "code": 2168, "category": 1 /* Error */ },
"All numerically named properties must be assignable to numeric indexer type '{0}'.": { "code": 2169, "category": 1 /* Error */ },
"All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": { "code": 2170, "category": 1 /* Error */ },
"All named properties must be assignable to string indexer type '{0}'.": { "code": 2171, "category": 1 /* Error */ },
"All named properties must be assignable to string indexer type '{0}':{NL}{1}": { "code": 2172, "category": 1 /* Error */ },
"A parameter initializer is only allowed in a function or constructor implementation.": { "code": 2174, "category": 1 /* Error */ },
"Function expression declared a non-void return type, but has no return expression.": { "code": 2176, "category": 1 /* Error */ },
"Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": { "code": 2177, "category": 1 /* Error */ },
"Module '{0}' has no exported member '{1}'.": { "code": 2178, "category": 1 /* Error */ },
"Unable to resolve module reference '{0}'.": { "code": 2179, "category": 1 /* Error */ },
"Could not find module '{0}' in module '{1}'.": { "code": 2180, "category": 1 /* Error */ },
"Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": { "code": 2181, "category": 1 /* Error */ },
"Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": { "code": 2182, "category": 1 /* Error */ },
"Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": { "code": 2183, "category": 1 /* Error */ },
"Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": { "code": 2184, "category": 1 /* Error */ },
"Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": { "code": 2185, "category": 1 /* Error */ },
"Type name '{0}' in extends clause does not reference constructor function for '{1}'.": { "code": 2186, "category": 1 /* Error */ },
"Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": { "code": 2187, "category": 1 /* Error */ },
"Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": { "code": 2188, "category": 1 /* Error */ },
"Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": { "code": 2189, "category": 1 /* Error */ },
"Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { "code": 2190, "category": 1 /* Error */ },
"Ambient external module declaration cannot be reopened.": { "code": 2191, "category": 1 /* Error */ },
"All declarations of merged declaration '{0}' must be exported or not exported.": { "code": 2192, "category": 1 /* Error */ },
"'super' cannot be referenced in constructor arguments.": { "code": 2193, "category": 1 /* Error */ },
"Return type of constructor signature must be assignable to the instance type of the class.": { "code": 2194, "category": 1 /* Error */ },
"Ambient external module declaration must be defined in global context.": { "code": 2195, "category": 1 /* Error */ },
"Ambient external module declaration cannot specify relative module name.": { "code": 2196, "category": 1 /* Error */ },
"Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { "code": 2197, "category": 1 /* Error */ },
"No best common type exists among return expressions.": { "code": 2198, "category": 1 /* Error */ },
"Import declaration cannot refer to external module reference when --noResolve option is set.": { "code": 2199, "category": 1 /* Error */ },
"Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { "code": 2200, "category": 1 /* Error */ },
"Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { "code": 2205, "category": 1 /* Error */ },
"Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { "code": 2206, "category": 1 /* Error */ },
"Expression resolves to '_super' that compiler uses to capture base class reference.": { "code": 2207, "category": 1 /* Error */ },
"TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { "code": 2208, "category": 1 /* Error */ },
"TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { "code": 2209, "category": 1 /* Error */ },
"TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": { "code": 2210, "category": 1 /* Error */ },
"TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": { "code": 2211, "category": 1 /* Error */ },
"TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": { "code": 2212, "category": 1 /* Error */ },
"TypeParameter '{0}' of exported function has or is using private type '{1}'.": { "code": 2213, "category": 1 /* Error */ },
"TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { "code": 2214, "category": 1 /* Error */ },
"TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": { "code": 2215, "category": 1 /* Error */ },
"TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": { "code": 2216, "category": 1 /* Error */ },
"TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": { "code": 2217, "category": 1 /* Error */ },
"TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": { "code": 2218, "category": 1 /* Error */ },
"TypeParameter '{0}' of exported function is using inaccessible module {1}.": { "code": 2219, "category": 1 /* Error */ },
"TypeParameter '{0}' of exported class has or is using private type '{1}'.": { "code": 2220, "category": 1 /* Error */ },
"TypeParameter '{0}' of exported interface has or is using private type '{1}'.": { "code": 2221, "category": 1 /* Error */ },
"TypeParameter '{0}' of exported class is using inaccessible module {1}.": { "code": 2222, "category": 1 /* Error */ },
"TypeParameter '{0}' of exported interface is using inaccessible module {1}.": { "code": 2223, "category": 1 /* Error */ },
"Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { "code": 2224, "category": 1 /* Error */ },
"Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { "code": 2225, "category": 1 /* Error */ },
"No best common type exists between '{0}' and '{1}'.": { "code": 2226, "category": 1 /* Error */ },
"No best common type exists between '{0}', '{1}', and '{2}'.": { "code": 2227, "category": 1 /* Error */ },
"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { "code": 2228, "category": 1 /* Error */ },
"Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { "code": 2229, "category": 1 /* Error */ },
"Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { "code": 2230, "category": 1 /* Error */ },
"Parameter '{0}' cannot be referenced in its initializer.": { "code": 2231, "category": 1 /* Error */ },
"Duplicate string index signature.": { "code": 2232, "category": 1 /* Error */ },
"Duplicate number index signature.": { "code": 2233, "category": 1 /* Error */ },
"All declarations of an interface must have identical type parameters.": { "code": 2234, "category": 1 /* Error */ },
"Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { "code": 2235, "category": 1 /* Error */ },
"Neither type '{0}' nor type '{1}' is assignable to the other.": { "code": 2236, "category": 1 /* Error */ },
"Neither type '{0}' nor type '{1}' is assignable to the other:{NL}{2}": { "code": 2237, "category": 1 /* Error */ },
"Duplicate function implementation.": { "code": 2237, "category": 1 /* Error */ },
"Function implementation expected.": { "code": 2238, "category": 1 /* Error */ },
"Function overload name must be '{0}'.": { "code": 2239, "category": 1 /* Error */ },
"Constructor implementation expected.": { "code": 2240, "category": 1 /* Error */ },
"Class name cannot be '{0}'.": { "code": 2241, "category": 1 /* Error */ },
"Interface name cannot be '{0}'.": { "code": 2242, "category": 1 /* Error */ },
"Enum name cannot be '{0}'.": { "code": 2243, "category": 1 /* Error */ },
"A module cannot have multiple export assignments.": { "code": 2244, "category": 1 /* Error */ },
"Export assignment not allowed in module with exported element.": { "code": 2245, "category": 1 /* Error */ },
"A parameter property is only allowed in a constructor implementation.": { "code": 2246, "category": 1 /* Error */ },
"Function overload must be static.": { "code": 2247, "category": 1 /* Error */ },
"Function overload must not be static.": { "code": 2248, "category": 1 /* Error */ },
"Type '{0}' is missing property '{1}' from type '{2}'.": { "code": 4000, "category": 3 /* NoPrefix */ },
"Types of property '{0}' of types '{1}' and '{2}' are incompatible.": { "code": 4001, "category": 3 /* NoPrefix */ },
"Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": { "code": 4002, "category": 3 /* NoPrefix */ },
"Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { "code": 4003, "category": 3 /* NoPrefix */ },
"Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { "code": 4004, "category": 3 /* NoPrefix */ },
"Types '{0}' and '{1}' define property '{2}' as private.": { "code": 4005, "category": 3 /* NoPrefix */ },
"Call signatures of types '{0}' and '{1}' are incompatible.": { "code": 4006, "category": 3 /* NoPrefix */ },
"Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4007, "category": 3 /* NoPrefix */ },
"Type '{0}' requires a call signature, but type '{1}' lacks one.": { "code": 4008, "category": 3 /* NoPrefix */ },
"Construct signatures of types '{0}' and '{1}' are incompatible.": { "code": 4009, "category": 3 /* NoPrefix */ },
"Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4010, "category": 3 /* NoPrefix */ },
"Type '{0}' requires a construct signature, but type '{1}' lacks one.": { "code": 4011, "category": 3 /* NoPrefix */ },
"Index signatures of types '{0}' and '{1}' are incompatible.": { "code": 4012, "category": 3 /* NoPrefix */ },
"Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4013, "category": 3 /* NoPrefix */ },
"Call signature expects {0} or fewer parameters.": { "code": 4014, "category": 3 /* NoPrefix */ },
"Could not apply type '{0}' to argument {1} which is of type '{2}'.": { "code": 4015, "category": 3 /* NoPrefix */ },
"Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { "code": 4016, "category": 3 /* NoPrefix */ },
"Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { "code": 4017, "category": 3 /* NoPrefix */ },
"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { "code": 4018, "category": 3 /* NoPrefix */ },
"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { "code": 4019, "category": 3 /* NoPrefix */ },
"Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": { "code": 4020, "category": 3 /* NoPrefix */ },
"Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": { "code": 4021, "category": 3 /* NoPrefix */ },
"Type reference cannot refer to container '{0}'.": { "code": 4022, "category": 1 /* Error */ },
"Type reference must refer to type.": { "code": 4023, "category": 1 /* Error */ },
"In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": { "code": 4024, "category": 1 /* Error */ },
" (+ {0} overload(s))": { "code": 4025, "category": 2 /* Message */ },
"Variable declaration cannot have the same name as an import declaration.": { "code": 4026, "category": 1 /* Error */ },
"Signature expected {0} type arguments, got {1} instead.": { "code": 4027, "category": 1 /* Error */ },
"Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": { "code": 4028, "category": 3 /* NoPrefix */ },
"Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": { "code": 4029, "category": 3 /* NoPrefix */ },
"Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": { "code": 4030, "category": 3 /* NoPrefix */ },
"Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": { "code": 4031, "category": 3 /* NoPrefix */ },
"Named properties '{0}' of types '{1}' and '{2}' are not identical.": { "code": 4032, "category": 3 /* NoPrefix */ },
"Types of string indexer of types '{0}' and '{1}' are not identical.": { "code": 4033, "category": 3 /* NoPrefix */ },
"Types of number indexer of types '{0}' and '{1}' are not identical.": { "code": 4034, "category": 3 /* NoPrefix */ },
"Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": { "code": 4035, "category": 3 /* NoPrefix */ },
"Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": { "code": 4036, "category": 3 /* NoPrefix */ },
"Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": { "code": 4037, "category": 3 /* NoPrefix */ },
"Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { "code": 4038, "category": 3 /* NoPrefix */ },
"Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { "code": 4039, "category": 3 /* NoPrefix */ },
"Types '{0}' and '{1}' define static property '{2}' as private.": { "code": 4040, "category": 3 /* NoPrefix */ },
"Current host does not support '{0}' option.": { "code": 5001, "category": 1 /* Error */ },
"ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": { "code": 5002, "category": 1 /* Error */ },
"Argument for '{0}' option must be '{1}' or '{2}'": { "code": 5003, "category": 1 /* Error */ },
"Could not find file: '{0}'.": { "code": 5004, "category": 1 /* Error */ },
"A file cannot have a reference to itself.": { "code": 5006, "category": 1 /* Error */ },
"Cannot resolve referenced file: '{0}'.": { "code": 5007, "category": 1 /* Error */ },
"Cannot find the common subdirectory path for the input files.": { "code": 5009, "category": 1 /* Error */ },
"Emit Error: {0}.": { "code": 5011, "category": 1 /* Error */ },
"Cannot read file '{0}': {1}": { "code": 5012, "category": 1 /* Error */ },
"Unsupported file encoding.": { "code": 5013, "category": 3 /* NoPrefix */ },
"Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'.": { "code": 5014, "category": 1 /* Error */ },
"Unsupported locale: '{0}'.": { "code": 5015, "category": 1 /* Error */ },
"Execution Failed.{NL}": { "code": 5016, "category": 1 /* Error */ },
"Invalid call to 'up'": { "code": 5019, "category": 1 /* Error */ },
"Invalid call to 'down'": { "code": 5020, "category": 1 /* Error */ },
"Base64 value '{0}' finished with a continuation bit.": { "code": 5021, "category": 1 /* Error */ },
"Unknown compiler option '{0}'": { "code": 5023, "category": 1 /* Error */ },
"Expected {0} arguments to message, got {1} instead.": { "code": 5024, "category": 1 /* Error */ },
"Expected the message '{0}' to have {1} arguments, but it had {2}": { "code": 5025, "category": 1 /* Error */ },
"Could not delete file '{0}'": { "code": 5034, "category": 1 /* Error */ },
"Could not create directory '{0}'": { "code": 5035, "category": 1 /* Error */ },
"Error while executing file '{0}': ": { "code": 5036, "category": 1 /* Error */ },
"Cannot compile external modules unless the '--module' flag is provided.": { "code": 5037, "category": 1 /* Error */ },
"Option mapRoot cannot be specified without specifying sourcemap option.": { "code": 5038, "category": 1 /* Error */ },
"Option sourceRoot cannot be specified without specifying sourcemap option.": { "code": 5039, "category": 1 /* Error */ },
"Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": { "code": 5040, "category": 1 /* Error */ },
"Option '{0}' specified without '{1}'": { "code": 5041, "category": 1 /* Error */ },
"'codepage' option not supported on current platform.": { "code": 5042, "category": 1 /* Error */ },
"Concatenate and emit output to single file.": { "code": 6001, "category": 2 /* Message */ },
"Generates corresponding {0} file.": { "code": 6002, "category": 2 /* Message */ },
"Specifies the location where debugger should locate map files instead of generated locations.": { "code": 6003, "category": 2 /* Message */ },
"Specifies the location where debugger should locate TypeScript files instead of source locations.": { "code": 6004, "category": 2 /* Message */ },
"Watch input files.": { "code": 6005, "category": 2 /* Message */ },
"Redirect output structure to the directory.": { "code": 6006, "category": 2 /* Message */ },
"Do not emit comments to output.": { "code": 6009, "category": 2 /* Message */ },
"Skip resolution and preprocessing.": { "code": 6010, "category": 2 /* Message */ },
"Specify ECMAScript target version: '{0}' (default), or '{1}'": { "code": 6015, "category": 2 /* Message */ },
"Specify module code generation: '{0}' or '{1}'": { "code": 6016, "category": 2 /* Message */ },
"Print this message.": { "code": 6017, "category": 2 /* Message */ },
"Print the compiler's version: {0}": { "code": 6019, "category": 2 /* Message */ },
"Allow use of deprecated '{0}' keyword when referencing an external module.": { "code": 6021, "category": 2 /* Message */ },
"Specify locale for errors and messages. For example '{0}' or '{1}'": { "code": 6022, "category": 2 /* Message */ },
"Syntax: {0}": { "code": 6023, "category": 2 /* Message */ },
"options": { "code": 6024, "category": 2 /* Message */ },
"file1": { "code": 6025, "category": 2 /* Message */ },
"Examples:": { "code": 6026, "category": 2 /* Message */ },
"Options:": { "code": 6027, "category": 2 /* Message */ },
"Insert command line options and files from a file.": { "code": 6030, "category": 2 /* Message */ },
"Version {0}": { "code": 6029, "category": 2 /* Message */ },
"Use the '{0}' flag to see options.": { "code": 6031, "category": 2 /* Message */ },
"{NL}Recompiling ({0}):": { "code": 6032, "category": 2 /* Message */ },
"STRING": { "code": 6033, "category": 2 /* Message */ },
"KIND": { "code": 6034, "category": 2 /* Message */ },
"file2": { "code": 6035, "category": 2 /* Message */ },
"VERSION": { "code": 6036, "category": 2 /* Message */ },
"LOCATION": { "code": 6037, "category": 2 /* Message */ },
"DIRECTORY": { "code": 6038, "category": 2 /* Message */ },
"NUMBER": { "code": 6039, "category": 2 /* Message */ },
"Specify the codepage to use when opening source files.": { "code": 6040, "category": 2 /* Message */ },
"Additional locations:": { "code": 6041, "category": 2 /* Message */ },
"This version of the Javascript runtime does not support the '{0}' function.": { "code": 7000, "category": 1 /* Error */ },
"Unknown rule.": { "code": 7002, "category": 1 /* Error */ },
"Invalid line number ({0})": { "code": 7003, "category": 1 /* Error */ },
"Warn on expressions and declarations with an implied 'any' type.": { "code": 7004, "category": 2 /* Message */ },
"Variable '{0}' implicitly has an 'any' type.": { "code": 7005, "category": 1 /* Error */ },
"Parameter '{0}' of '{1}' implicitly has an 'any' type.": { "code": 7006, "category": 1 /* Error */ },
"Parameter '{0}' of function type implicitly has an 'any' type.": { "code": 7007, "category": 1 /* Error */ },
"Member '{0}' of object type implicitly has an 'any' type.": { "code": 7008, "category": 1 /* Error */ },
"'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": { "code": 7009, "category": 1 /* Error */ },
"'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7010, "category": 1 /* Error */ },
"Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7011, "category": 1 /* Error */ },
"Parameter '{0}' of lambda function implicitly has an 'any' type.": { "code": 7012, "category": 1 /* Error */ },
"Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7013, "category": 1 /* Error */ },
"Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7014, "category": 1 /* Error */ },
"Array Literal implicitly has an 'any' type from widening.": { "code": 7015, "category": 1 /* Error */ },
"'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": { "code": 7016, "category": 1 /* Error */ },
"Index signature of object type implicitly has an 'any' type.": { "code": 7017, "category": 1 /* Error */ },
"Object literal's property '{0}' implicitly has an 'any' type from widening.": { "code": 7018, "category": 1 /* Error */ }
};
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ArrayUtilities = (function () {
function ArrayUtilities() {
}
ArrayUtilities.sequenceEquals = function (array1, array2, equals) {
if (array1 === array2) {
return true;
}
if (!array1 || !array2) {
return false;
}
if (array1.length !== array2.length) {
return false;
}
for (var i = 0, n = array1.length; i < n; i++) {
if (!equals(array1[i], array2[i])) {
return false;
}
}
return true;
};
ArrayUtilities.contains = function (array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] === value) {
return true;
}
}
return false;
};
ArrayUtilities.distinct = function (array, equalsFn) {
var result = [];
for (var i = 0, n = array.length; i < n; i++) {
var current = array[i];
for (var j = 0; j < result.length; j++) {
if (equalsFn(result[j], current)) {
break;
}
}
if (j === result.length) {
result.push(current);
}
}
return result;
};
ArrayUtilities.last = function (array) {
if (array.length === 0) {
throw TypeScript.Errors.argumentOutOfRange('array');
}
return array[array.length - 1];
};
ArrayUtilities.lastOrDefault = function (array, predicate) {
for (var i = array.length - 1; i >= 0; i--) {
var v = array[i];
if (predicate(v, i)) {
return v;
}
}
return undefined;
};
ArrayUtilities.firstOrDefault = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
var value = array[i];
if (func(value, i)) {
return value;
}
}
return undefined;
};
ArrayUtilities.first = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
var value = array[i];
if (!func || func(value, i)) {
return value;
}
}
throw TypeScript.Errors.invalidOperation();
};
ArrayUtilities.sum = function (array, func) {
var result = 0;
for (var i = 0, n = array.length; i < n; i++) {
result += func(array[i]);
}
return result;
};
ArrayUtilities.select = function (values, func) {
var result = new Array(values.length);
for (var i = 0; i < values.length; i++) {
result[i] = func(values[i]);
}
return result;
};
ArrayUtilities.where = function (values, func) {
var result = new Array();
for (var i = 0; i < values.length; i++) {
if (func(values[i])) {
result.push(values[i]);
}
}
return result;
};
ArrayUtilities.any = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
if (func(array[i])) {
return true;
}
}
return false;
};
ArrayUtilities.all = function (array, func) {
for (var i = 0, n = array.length; i < n; i++) {
if (!func(array[i])) {
return false;
}
}
return true;
};
ArrayUtilities.binarySearch = function (array, value) {
var low = 0;
var high = array.length - 1;
while (low <= high) {
var middle = low + ((high - low) >> 1);
var midValue = array[middle];
if (midValue === value) {
return middle;
}
else if (midValue > value) {
high = middle - 1;
}
else {
low = middle + 1;
}
}
return ~low;
};
ArrayUtilities.createArray = function (length, defaultValue) {
var result = new Array(length);
for (var i = 0; i < length; i++) {
result[i] = defaultValue;
}
return result;
};
ArrayUtilities.grow = function (array, length, defaultValue) {
var count = length - array.length;
for (var i = 0; i < count; i++) {
array.push(defaultValue);
}
};
ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) {
for (var i = 0; i < length; i++) {
destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];
}
};
ArrayUtilities.indexOf = function (array, predicate) {
for (var i = 0, n = array.length; i < n; i++) {
if (predicate(array[i])) {
return i;
}
}
return -1;
};
return ArrayUtilities;
})();
TypeScript.ArrayUtilities = ArrayUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (AssertionLevel) {
AssertionLevel[AssertionLevel["None"] = 0] = "None";
AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal";
AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive";
AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive";
})(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {}));
var AssertionLevel = TypeScript.AssertionLevel;
var Debug = (function () {
function Debug() {
}
Debug.shouldAssert = function (level) {
return this.currentAssertionLevel >= level;
};
Debug.assert = function (expression, message, verboseDebugInfo) {
if (!expression) {
var verboseDebugString = "";
if (verboseDebugInfo) {
verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo();
}
message = message || "";
throw new Error("Debug Failure. False expression: " + message + verboseDebugString);
}
};
Debug.fail = function (message) {
Debug.assert(false, message);
};
Debug.currentAssertionLevel = 0 /* None */;
return Debug;
})();
TypeScript.Debug = Debug;
})(TypeScript || (TypeScript = {}));
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var TypeScript;
(function (TypeScript) {
var Location = (function () {
function Location(fileName, lineMap, start, length) {
this._fileName = fileName;
this._lineMap = lineMap;
this._start = start;
this._length = length;
}
Location.prototype.fileName = function () {
return this._fileName;
};
Location.prototype.lineMap = function () {
return this._lineMap;
};
Location.prototype.line = function () {
return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0;
};
Location.prototype.character = function () {
return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0;
};
Location.prototype.start = function () {
return this._start;
};
Location.prototype.length = function () {
return this._length;
};
Location.equals = function (location1, location2) {
return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length;
};
return Location;
})();
TypeScript.Location = Location;
var Diagnostic = (function (_super) {
__extends(Diagnostic, _super);
function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) {
_super.call(this, fileName, lineMap, start, length);
this._diagnosticKey = diagnosticKey;
this._arguments = (_arguments && _arguments.length > 0) ? _arguments : undefined;
this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : undefined;
}
Diagnostic.prototype.toJSON = function (key) {
var result = {};
result.start = this.start();
result.length = this.length();
result.diagnosticCode = this._diagnosticKey;
var _arguments = this.arguments();
if (_arguments && _arguments.length > 0) {
result.arguments = _arguments;
}
return result;
};
Diagnostic.prototype.diagnosticKey = function () {
return this._diagnosticKey;
};
Diagnostic.prototype.arguments = function () {
return this._arguments;
};
Diagnostic.prototype.text = function () {
return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments);
};
Diagnostic.prototype.message = function () {
return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments);
};
Diagnostic.prototype.additionalLocations = function () {
return this._additionalLocations || [];
};
Diagnostic.equals = function (diagnostic1, diagnostic2) {
return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) { return v1 === v2; });
};
Diagnostic.prototype.info = function () {
return getDiagnosticInfoFromKey(this.diagnosticKey());
};
return Diagnostic;
})(Location);
TypeScript.Diagnostic = Diagnostic;
function newLine() {
return "\r\n";
}
TypeScript.newLine = newLine;
function getLargestIndex(diagnostic) {
var largest = -1;
var regex = /\{(\d+)\}/g;
var match;
while (match = regex.exec(diagnostic)) {
var val = parseInt(match[1]);
if (!isNaN(val) && val > largest) {
largest = val;
}
}
return largest;
}
function getDiagnosticInfoFromKey(diagnosticKey) {
var result = TypeScript.diagnosticInformationMap[diagnosticKey];
TypeScript.Debug.assert(result);
return result;
}
function getLocalizedText(diagnosticKey, args) {
var diagnosticMessageText = diagnosticKey;
TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null);
var actualCount = args ? args.length : 0;
var expectedCount = 1 + getLargestIndex(diagnosticKey);
if (expectedCount !== actualCount) {
throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount]));
}
var valueCount = 1 + getLargestIndex(diagnosticMessageText);
if (valueCount !== expectedCount) {
throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount]));
}
diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) {
return typeof args[num] !== 'undefined' ? args[num] : match;
});
diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) {
return TypeScript.newLine();
});
return diagnosticMessageText;
}
TypeScript.getLocalizedText = getLocalizedText;
function getDiagnosticMessage(diagnosticKey, args) {
var diagnostic = getDiagnosticInfoFromKey(diagnosticKey);
var diagnosticMessageText = getLocalizedText(diagnosticKey, args);
var message;
if (diagnostic.category === 1 /* Error */) {
message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]);
}
else if (diagnostic.category === 0 /* Warning */) {
message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]);
}
else {
message = diagnosticMessageText;
}
return message;
}
TypeScript.getDiagnosticMessage = getDiagnosticMessage;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Errors = (function () {
function Errors() {
}
Errors.argument = function (argument, message) {
return new Error("Invalid argument: " + argument + ". " + message);
};
Errors.argumentOutOfRange = function (argument) {
return new Error("Argument out of range: " + argument);
};
Errors.argumentNull = function (argument) {
return new Error("Argument null: " + argument);
};
Errors.abstract = function () {
return new Error("Operation not implemented properly by subclass.");
};
Errors.notYetImplemented = function () {
return new Error("Not yet implemented.");
};
Errors.invalidOperation = function (message) {
return new Error("Invalid operation: " + message);
};
return Errors;
})();
TypeScript.Errors = Errors;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var IntegerUtilities;
(function (IntegerUtilities) {
function integerDivide(numerator, denominator) {
return (numerator / denominator) >> 0;
}
IntegerUtilities.integerDivide = integerDivide;
function integerMultiplyLow32Bits(n1, n2) {
var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0;
return resultLow32;
}
IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits;
function isInteger(text) {
return /^[0-9]+$/.test(text);
}
IntegerUtilities.isInteger = isInteger;
function isHexInteger(text) {
return /^0(x|X)[0-9a-fA-F]+$/.test(text);
}
IntegerUtilities.isHexInteger = isHexInteger;
})(IntegerUtilities = TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var LineMap = (function () {
function LineMap(_computeLineStarts, length) {
this._computeLineStarts = _computeLineStarts;
this.length = length;
this._lineStarts = undefined;
}
LineMap.prototype.toJSON = function (key) {
return { lineStarts: this.lineStarts(), length: this.length };
};
LineMap.prototype.equals = function (other) {
return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) { return v1 === v2; });
};
LineMap.prototype.lineStarts = function () {
if (!this._lineStarts) {
this._lineStarts = this._computeLineStarts();
}
return this._lineStarts;
};
LineMap.prototype.lineCount = function () {
return this.lineStarts().length;
};
LineMap.prototype.getPosition = function (line, character) {
return this.lineStarts()[line] + character;
};
LineMap.prototype.getLineNumberFromPosition = function (position) {
if (position < 0 || position > this.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
if (position === this.length) {
return this.lineCount() - 1;
}
var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position);
if (lineNumber < 0) {
lineNumber = (~lineNumber) - 1;
}
return lineNumber;
};
LineMap.prototype.getLineStartPosition = function (lineNumber) {
return this.lineStarts()[lineNumber];
};
LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) {
if (position < 0 || position > this.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var lineNumber = this.getLineNumberFromPosition(position);
lineAndCharacter.line = lineNumber;
lineAndCharacter.character = position - this.lineStarts()[lineNumber];
};
LineMap.prototype.getLineAndCharacterFromPosition = function (position) {
if (position < 0 || position > this.length) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var lineNumber = this.getLineNumberFromPosition(position);
return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]);
};
LineMap.empty = new LineMap(function () { return [0]; }, 0);
return LineMap;
})();
TypeScript.LineMap = LineMap;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var LineAndCharacter = (function () {
function LineAndCharacter(line, character) {
this._line = 0;
this._character = 0;
if (line < 0) {
throw TypeScript.Errors.argumentOutOfRange("line");
}
if (character < 0) {
throw TypeScript.Errors.argumentOutOfRange("character");
}
this._line = line;
this._character = character;
}
LineAndCharacter.prototype.line = function () {
return this._line;
};
LineAndCharacter.prototype.character = function () {
return this._character;
};
return LineAndCharacter;
})();
TypeScript.LineAndCharacter = LineAndCharacter;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var StringUtilities = (function () {
function StringUtilities() {
}
StringUtilities.isString = function (value) {
return Object.prototype.toString.apply(value, []) === '[object String]';
};
StringUtilities.endsWith = function (string, value) {
return string.substring(string.length - value.length, string.length) === value;
};
StringUtilities.startsWith = function (string, value) {
return string.substr(0, value.length) === value;
};
StringUtilities.repeat = function (value, count) {
return Array(count + 1).join(value);
};
return StringUtilities;
})();
TypeScript.StringUtilities = StringUtilities;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (CharacterCodes) {
CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter";
CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter";
CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed";
CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn";
CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator";
CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator";
CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine";
CharacterCodes[CharacterCodes["space"] = 0x0020] = "space";
CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace";
CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad";
CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad";
CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace";
CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace";
CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace";
CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace";
CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace";
CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace";
CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace";
CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace";
CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace";
CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace";
CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace";
CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace";
CharacterCodes[CharacterCodes["_"] = 95] = "_";
CharacterCodes[CharacterCodes["$"] = 36] = "$";
CharacterCodes[CharacterCodes["_0"] = 48] = "_0";
CharacterCodes[CharacterCodes["_1"] = 49] = "_1";
CharacterCodes[CharacterCodes["_2"] = 50] = "_2";
CharacterCodes[CharacterCodes["_3"] = 51] = "_3";
CharacterCodes[CharacterCodes["_4"] = 52] = "_4";
CharacterCodes[CharacterCodes["_5"] = 53] = "_5";
CharacterCodes[CharacterCodes["_6"] = 54] = "_6";
CharacterCodes[CharacterCodes["_7"] = 55] = "_7";
CharacterCodes[CharacterCodes["_8"] = 56] = "_8";
CharacterCodes[CharacterCodes["_9"] = 57] = "_9";
CharacterCodes[CharacterCodes["a"] = 97] = "a";
CharacterCodes[CharacterCodes["b"] = 98] = "b";
CharacterCodes[CharacterCodes["c"] = 99] = "c";
CharacterCodes[CharacterCodes["d"] = 100] = "d";
CharacterCodes[CharacterCodes["e"] = 101] = "e";
CharacterCodes[CharacterCodes["f"] = 102] = "f";
CharacterCodes[CharacterCodes["g"] = 103] = "g";
CharacterCodes[CharacterCodes["h"] = 104] = "h";
CharacterCodes[CharacterCodes["i"] = 105] = "i";
CharacterCodes[CharacterCodes["j"] = 106] = "j";
CharacterCodes[CharacterCodes["k"] = 107] = "k";
CharacterCodes[CharacterCodes["l"] = 108] = "l";
CharacterCodes[CharacterCodes["m"] = 109] = "m";
CharacterCodes[CharacterCodes["n"] = 110] = "n";
CharacterCodes[CharacterCodes["o"] = 111] = "o";
CharacterCodes[CharacterCodes["p"] = 112] = "p";
CharacterCodes[CharacterCodes["q"] = 113] = "q";
CharacterCodes[CharacterCodes["r"] = 114] = "r";
CharacterCodes[CharacterCodes["s"] = 115] = "s";
CharacterCodes[CharacterCodes["t"] = 116] = "t";
CharacterCodes[CharacterCodes["u"] = 117] = "u";
CharacterCodes[CharacterCodes["v"] = 118] = "v";
CharacterCodes[CharacterCodes["w"] = 119] = "w";
CharacterCodes[CharacterCodes["x"] = 120] = "x";
CharacterCodes[CharacterCodes["y"] = 121] = "y";
CharacterCodes[CharacterCodes["z"] = 122] = "z";
CharacterCodes[CharacterCodes["A"] = 65] = "A";
CharacterCodes[CharacterCodes["B"] = 66] = "B";
CharacterCodes[CharacterCodes["C"] = 67] = "C";
CharacterCodes[CharacterCodes["D"] = 68] = "D";
CharacterCodes[CharacterCodes["E"] = 69] = "E";
CharacterCodes[CharacterCodes["F"] = 70] = "F";
CharacterCodes[CharacterCodes["G"] = 71] = "G";
CharacterCodes[CharacterCodes["H"] = 72] = "H";
CharacterCodes[CharacterCodes["I"] = 73] = "I";
CharacterCodes[CharacterCodes["J"] = 74] = "J";
CharacterCodes[CharacterCodes["K"] = 75] = "K";
CharacterCodes[CharacterCodes["L"] = 76] = "L";
CharacterCodes[CharacterCodes["M"] = 77] = "M";
CharacterCodes[CharacterCodes["N"] = 78] = "N";
CharacterCodes[CharacterCodes["O"] = 79] = "O";
CharacterCodes[CharacterCodes["P"] = 80] = "P";
CharacterCodes[CharacterCodes["Q"] = 81] = "Q";
CharacterCodes[CharacterCodes["R"] = 82] = "R";
CharacterCodes[CharacterCodes["S"] = 83] = "S";
CharacterCodes[CharacterCodes["T"] = 84] = "T";
CharacterCodes[CharacterCodes["U"] = 85] = "U";
CharacterCodes[CharacterCodes["V"] = 86] = "V";
CharacterCodes[CharacterCodes["W"] = 87] = "W";
CharacterCodes[CharacterCodes["X"] = 88] = "X";
CharacterCodes[CharacterCodes["Y"] = 89] = "Y";
CharacterCodes[CharacterCodes["Z"] = 90] = "Z";
CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand";
CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk";
CharacterCodes[CharacterCodes["at"] = 64] = "at";
CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash";
CharacterCodes[CharacterCodes["backtick"] = 96] = "backtick";
CharacterCodes[CharacterCodes["bar"] = 124] = "bar";
CharacterCodes[CharacterCodes["caret"] = 94] = "caret";
CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace";
CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket";
CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen";
CharacterCodes[CharacterCodes["colon"] = 58] = "colon";
CharacterCodes[CharacterCodes["comma"] = 44] = "comma";
CharacterCodes[CharacterCodes["dot"] = 46] = "dot";
CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote";
CharacterCodes[CharacterCodes["equals"] = 61] = "equals";
CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation";
CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan";
CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan";
CharacterCodes[CharacterCodes["minus"] = 45] = "minus";
CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace";
CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket";
CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen";
CharacterCodes[CharacterCodes["percent"] = 37] = "percent";
CharacterCodes[CharacterCodes["plus"] = 43] = "plus";
CharacterCodes[CharacterCodes["question"] = 63] = "question";
CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon";
CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote";
CharacterCodes[CharacterCodes["slash"] = 47] = "slash";
CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde";
CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace";
CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed";
CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark";
CharacterCodes[CharacterCodes["tab"] = 9] = "tab";
CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab";
})(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {}));
var CharacterCodes = TypeScript.CharacterCodes;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ScriptSnapshot;
(function (ScriptSnapshot) {
var StringScriptSnapshot = (function () {
function StringScriptSnapshot(text) {
this.text = text;
this._lineStartPositions = undefined;
}
StringScriptSnapshot.prototype.getText = function (start, end) {
return this.text.substring(start, end);
};
StringScriptSnapshot.prototype.getLength = function () {
return this.text.length;
};
StringScriptSnapshot.prototype.getLineStartPositions = function () {
if (!this._lineStartPositions) {
this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text);
}
return this._lineStartPositions;
};
StringScriptSnapshot.prototype.getChangeRange = function (oldSnapshot) {
throw TypeScript.Errors.notYetImplemented();
};
return StringScriptSnapshot;
})();
function fromString(text) {
return new StringScriptSnapshot(text);
}
ScriptSnapshot.fromString = fromString;
})(ScriptSnapshot = TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var LineMap1;
(function (LineMap1) {
function fromSimpleText(text) {
return new TypeScript.LineMap(function () { return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { return text.charCodeAt(index); }, length: text.length() }); }, text.length());
}
LineMap1.fromSimpleText = fromSimpleText;
function fromScriptSnapshot(scriptSnapshot) {
return new TypeScript.LineMap(function () { return scriptSnapshot.getLineStartPositions(); }, scriptSnapshot.getLength());
}
LineMap1.fromScriptSnapshot = fromScriptSnapshot;
function fromString(text) {
return new TypeScript.LineMap(function () { return TypeScript.TextUtilities.parseLineStarts(text); }, text.length);
}
LineMap1.fromString = fromString;
})(LineMap1 = TypeScript.LineMap1 || (TypeScript.LineMap1 = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SimpleText;
(function (SimpleText) {
var SimpleStringText = (function () {
function SimpleStringText(value) {
this.value = value;
this._lineMap = undefined;
}
SimpleStringText.prototype.length = function () {
return this.value.length;
};
SimpleStringText.prototype.substr = function (start, length) {
var val = this.value;
return start === 0 && length == val.length ? val : val.substr(start, length);
};
SimpleStringText.prototype.charCodeAt = function (index) {
return this.value.charCodeAt(index);
};
SimpleStringText.prototype.lineMap = function () {
if (!this._lineMap) {
this._lineMap = TypeScript.LineMap1.fromString(this.value);
}
return this._lineMap;
};
return SimpleStringText;
})();
var SimpleScriptSnapshotText = (function () {
function SimpleScriptSnapshotText(scriptSnapshot) {
this.scriptSnapshot = scriptSnapshot;
this._lineMap = undefined;
}
SimpleScriptSnapshotText.prototype.charCodeAt = function (index) {
return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0);
};
SimpleScriptSnapshotText.prototype.length = function () {
return this.scriptSnapshot.getLength();
};
SimpleScriptSnapshotText.prototype.substr = function (start, length) {
return this.scriptSnapshot.getText(start, start + length);
};
SimpleScriptSnapshotText.prototype.lineMap = function () {
var _this = this;
if (!this._lineMap) {
this._lineMap = new TypeScript.LineMap(function () { return _this.scriptSnapshot.getLineStartPositions(); }, this.length());
}
return this._lineMap;
};
return SimpleScriptSnapshotText;
})();
function fromString(value) {
return new SimpleStringText(value);
}
SimpleText.fromString = fromString;
function fromScriptSnapshot(scriptSnapshot) {
return new SimpleScriptSnapshotText(scriptSnapshot);
}
SimpleText.fromScriptSnapshot = fromScriptSnapshot;
})(SimpleText = TypeScript.SimpleText || (TypeScript.SimpleText = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var TextUtilities;
(function (TextUtilities) {
function parseLineStarts(text) {
var length = text.length;
if (0 === length) {
var result = new Array();
result.push(0);
return result;
}
var position = 0;
var index = 0;
var arrayBuilder = new Array();
var lineNumber = 0;
while (index < length) {
var c = text.charCodeAt(index);
var lineBreakLength;
if (c > 13 /* carriageReturn */ && c <= 127) {
index++;
continue;
}
else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) {
lineBreakLength = 2;
}
else if (c === 10 /* lineFeed */) {
lineBreakLength = 1;
}
else {
lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index);
}
if (0 === lineBreakLength) {
index++;
}
else {
arrayBuilder.push(position);
index += lineBreakLength;
position = index;
lineNumber++;
}
}
arrayBuilder.push(position);
return arrayBuilder;
}
TextUtilities.parseLineStarts = parseLineStarts;
function getLengthOfLineBreakSlow(text, index, c) {
if (c === 13 /* carriageReturn */) {
var next = index + 1;
return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1;
}
else if (isAnyLineBreakCharacter(c)) {
return 1;
}
else {
return 0;
}
}
TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow;
function getLengthOfLineBreak(text, index) {
var c = text.charCodeAt(index);
if (c > 13 /* carriageReturn */ && c <= 127) {
return 0;
}
return getLengthOfLineBreakSlow(text, index, c);
}
TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak;
function isAnyLineBreakCharacter(c) {
return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */;
}
TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter;
})(TextUtilities = TypeScript.TextUtilities || (TypeScript.TextUtilities = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var TextSpan = (function () {
function TextSpan(start, length) {
if (start < 0) {
TypeScript.Errors.argument("start");
}
if (length < 0) {
TypeScript.Errors.argument("length");
}
this._start = start;
this._length = length;
}
TextSpan.prototype.toJSON = function (key) {
return { start: this._start, length: this._length };
};
TextSpan.prototype.start = function () {
return this._start;
};
TextSpan.prototype.length = function () {
return this._length;
};
TextSpan.prototype.end = function () {
return this._start + this._length;
};
TextSpan.prototype.isEmpty = function () {
return this._length === 0;
};
TextSpan.prototype.containsPosition = function (position) {
return position >= this._start && position < this.end();
};
TextSpan.prototype.containsTextSpan = function (span) {
return span._start >= this._start && span.end() <= this.end();
};
TextSpan.prototype.overlapsWith = function (span) {
var overlapStart = Math.max(this._start, span._start);
var overlapEnd = Math.min(this.end(), span.end());
return overlapStart < overlapEnd;
};
TextSpan.prototype.overlap = function (span) {
var overlapStart = Math.max(this._start, span._start);
var overlapEnd = Math.min(this.end(), span.end());
if (overlapStart < overlapEnd) {
return TextSpan.fromBounds(overlapStart, overlapEnd);
}
return undefined;
};
TextSpan.prototype.intersectsWithTextSpan = function (span) {
return span._start <= this.end() && span.end() >= this._start;
};
TextSpan.prototype.intersectsWith = function (start, length) {
var end = start + length;
return start <= this.end() && end >= this._start;
};
TextSpan.prototype.intersectsWithPosition = function (position) {
return position <= this.end() && position >= this._start;
};
TextSpan.prototype.intersection = function (span) {
var intersectStart = Math.max(this._start, span._start);
var intersectEnd = Math.min(this.end(), span.end());
if (intersectStart <= intersectEnd) {
return TextSpan.fromBounds(intersectStart, intersectEnd);
}
return undefined;
};
TextSpan.fromBounds = function (start, end) {
TypeScript.Debug.assert(start >= 0);
TypeScript.Debug.assert(end - start >= 0);
return new TextSpan(start, end - start);
};
return TextSpan;
})();
TypeScript.TextSpan = TextSpan;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var TextChangeRange = (function () {
function TextChangeRange(span, newLength) {
if (newLength < 0) {
throw TypeScript.Errors.argumentOutOfRange("newLength");
}
this._span = span;
this._newLength = newLength;
}
TextChangeRange.prototype.span = function () {
return this._span;
};
TextChangeRange.prototype.newLength = function () {
return this._newLength;
};
TextChangeRange.prototype.newSpan = function () {
return new TypeScript.TextSpan(this.span().start(), this.newLength());
};
TextChangeRange.prototype.isUnchanged = function () {
return this.span().isEmpty() && this.newLength() === 0;
};
TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) {
if (changes.length === 0) {
return TextChangeRange.unchanged;
}
if (changes.length === 1) {
return changes[0];
}
var change0 = changes[0];
var oldStartN = change0.span().start();
var oldEndN = change0.span().end();
var newEndN = oldStartN + change0.newLength();
for (var i = 1; i < changes.length; i++) {
var nextChange = changes[i];
var oldStart1 = oldStartN;
var oldEnd1 = oldEndN;
var newEnd1 = newEndN;
var oldStart2 = nextChange.span().start();
var oldEnd2 = nextChange.span().end();
var newEnd2 = oldStart2 + nextChange.newLength();
oldStartN = Math.min(oldStart1, oldStart2);
oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1));
newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2));
}
return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN);
};
TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0);
return TextChangeRange;
})();
TypeScript.TextChangeRange = TextChangeRange;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var CharacterInfo;
(function (CharacterInfo) {
function isDecimalDigit(c) {
return c >= 48 /* _0 */ && c <= 57 /* _9 */;
}
CharacterInfo.isDecimalDigit = isDecimalDigit;
function isOctalDigit(c) {
return c >= 48 /* _0 */ && c <= 55 /* _7 */;
}
CharacterInfo.isOctalDigit = isOctalDigit;
function isHexDigit(c) {
return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */);
}
CharacterInfo.isHexDigit = isHexDigit;
function hexValue(c) {
return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10;
}
CharacterInfo.hexValue = hexValue;
function isWhitespace(ch) {
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
return true;
}
return false;
}
CharacterInfo.isWhitespace = isWhitespace;
function isLineTerminator(ch) {
switch (ch) {
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
return true;
}
return false;
}
CharacterInfo.isLineTerminator = isLineTerminator;
})(CharacterInfo = TypeScript.CharacterInfo || (TypeScript.CharacterInfo = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SyntaxConstants) {
SyntaxConstants[SyntaxConstants["None"] = 0] = "None";
SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed";
SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask";
SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask";
SyntaxConstants[SyntaxConstants["NodeParsedInDisallowInMask"] = 0x00000008] = "NodeParsedInDisallowInMask";
SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 4] = "NodeFullWidthShift";
})(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {}));
var SyntaxConstants = TypeScript.SyntaxConstants;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var FormattingOptions = (function () {
function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) {
this.useTabs = useTabs;
this.spacesPerTab = spacesPerTab;
this.indentSpaces = indentSpaces;
this.newLineCharacter = newLineCharacter;
}
FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n");
return FormattingOptions;
})();
TypeScript.FormattingOptions = FormattingOptions;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
(function (SyntaxKind) {
SyntaxKind[SyntaxKind["None"] = 0] = "None";
SyntaxKind[SyntaxKind["List"] = 1] = "List";
SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 2] = "WhitespaceTrivia";
SyntaxKind[SyntaxKind["NewLineTrivia"] = 3] = "NewLineTrivia";
SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 4] = "MultiLineCommentTrivia";
SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 5] = "SingleLineCommentTrivia";
SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 6] = "SkippedTokenTrivia";
SyntaxKind[SyntaxKind["ErrorToken"] = 7] = "ErrorToken";
SyntaxKind[SyntaxKind["EndOfFileToken"] = 8] = "EndOfFileToken";
SyntaxKind[SyntaxKind["IdentifierName"] = 9] = "IdentifierName";
SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 10] = "RegularExpressionLiteral";
SyntaxKind[SyntaxKind["NumericLiteral"] = 11] = "NumericLiteral";
SyntaxKind[SyntaxKind["StringLiteral"] = 12] = "StringLiteral";
SyntaxKind[SyntaxKind["NoSubstitutionTemplateToken"] = 13] = "NoSubstitutionTemplateToken";
SyntaxKind[SyntaxKind["TemplateStartToken"] = 14] = "TemplateStartToken";
SyntaxKind[SyntaxKind["TemplateMiddleToken"] = 15] = "TemplateMiddleToken";
SyntaxKind[SyntaxKind["TemplateEndToken"] = 16] = "TemplateEndToken";
SyntaxKind[SyntaxKind["BreakKeyword"] = 17] = "BreakKeyword";
SyntaxKind[SyntaxKind["CaseKeyword"] = 18] = "CaseKeyword";
SyntaxKind[SyntaxKind["CatchKeyword"] = 19] = "CatchKeyword";
SyntaxKind[SyntaxKind["ContinueKeyword"] = 20] = "ContinueKeyword";
SyntaxKind[SyntaxKind["DebuggerKeyword"] = 21] = "DebuggerKeyword";
SyntaxKind[SyntaxKind["DefaultKeyword"] = 22] = "DefaultKeyword";
SyntaxKind[SyntaxKind["DeleteKeyword"] = 23] = "DeleteKeyword";
SyntaxKind[SyntaxKind["DoKeyword"] = 24] = "DoKeyword";
SyntaxKind[SyntaxKind["ElseKeyword"] = 25] = "ElseKeyword";
SyntaxKind[SyntaxKind["FalseKeyword"] = 26] = "FalseKeyword";
SyntaxKind[SyntaxKind["FinallyKeyword"] = 27] = "FinallyKeyword";
SyntaxKind[SyntaxKind["ForKeyword"] = 28] = "ForKeyword";
SyntaxKind[SyntaxKind["FunctionKeyword"] = 29] = "FunctionKeyword";
SyntaxKind[SyntaxKind["IfKeyword"] = 30] = "IfKeyword";
SyntaxKind[SyntaxKind["InKeyword"] = 31] = "InKeyword";
SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 32] = "InstanceOfKeyword";
SyntaxKind[SyntaxKind["NewKeyword"] = 33] = "NewKeyword";
SyntaxKind[SyntaxKind["NullKeyword"] = 34] = "NullKeyword";
SyntaxKind[SyntaxKind["ReturnKeyword"] = 35] = "ReturnKeyword";
SyntaxKind[SyntaxKind["SwitchKeyword"] = 36] = "SwitchKeyword";
SyntaxKind[SyntaxKind["ThisKeyword"] = 37] = "ThisKeyword";
SyntaxKind[SyntaxKind["ThrowKeyword"] = 38] = "ThrowKeyword";
SyntaxKind[SyntaxKind["TrueKeyword"] = 39] = "TrueKeyword";
SyntaxKind[SyntaxKind["TryKeyword"] = 40] = "TryKeyword";
SyntaxKind[SyntaxKind["TypeOfKeyword"] = 41] = "TypeOfKeyword";
SyntaxKind[SyntaxKind["VarKeyword"] = 42] = "VarKeyword";
SyntaxKind[SyntaxKind["VoidKeyword"] = 43] = "VoidKeyword";
SyntaxKind[SyntaxKind["WhileKeyword"] = 44] = "WhileKeyword";
SyntaxKind[SyntaxKind["WithKeyword"] = 45] = "WithKeyword";
SyntaxKind[SyntaxKind["ClassKeyword"] = 46] = "ClassKeyword";
SyntaxKind[SyntaxKind["ConstKeyword"] = 47] = "ConstKeyword";
SyntaxKind[SyntaxKind["EnumKeyword"] = 48] = "EnumKeyword";
SyntaxKind[SyntaxKind["ExportKeyword"] = 49] = "ExportKeyword";
SyntaxKind[SyntaxKind["ExtendsKeyword"] = 50] = "ExtendsKeyword";
SyntaxKind[SyntaxKind["ImportKeyword"] = 51] = "ImportKeyword";
SyntaxKind[SyntaxKind["SuperKeyword"] = 52] = "SuperKeyword";
SyntaxKind[SyntaxKind["ImplementsKeyword"] = 53] = "ImplementsKeyword";
SyntaxKind[SyntaxKind["InterfaceKeyword"] = 54] = "InterfaceKeyword";
SyntaxKind[SyntaxKind["LetKeyword"] = 55] = "LetKeyword";
SyntaxKind[SyntaxKind["PackageKeyword"] = 56] = "PackageKeyword";
SyntaxKind[SyntaxKind["PrivateKeyword"] = 57] = "PrivateKeyword";
SyntaxKind[SyntaxKind["ProtectedKeyword"] = 58] = "ProtectedKeyword";
SyntaxKind[SyntaxKind["PublicKeyword"] = 59] = "PublicKeyword";
SyntaxKind[SyntaxKind["StaticKeyword"] = 60] = "StaticKeyword";
SyntaxKind[SyntaxKind["YieldKeyword"] = 61] = "YieldKeyword";
SyntaxKind[SyntaxKind["AnyKeyword"] = 62] = "AnyKeyword";
SyntaxKind[SyntaxKind["BooleanKeyword"] = 63] = "BooleanKeyword";
SyntaxKind[SyntaxKind["ConstructorKeyword"] = 64] = "ConstructorKeyword";
SyntaxKind[SyntaxKind["DeclareKeyword"] = 65] = "DeclareKeyword";
SyntaxKind[SyntaxKind["GetKeyword"] = 66] = "GetKeyword";
SyntaxKind[SyntaxKind["ModuleKeyword"] = 67] = "ModuleKeyword";
SyntaxKind[SyntaxKind["RequireKeyword"] = 68] = "RequireKeyword";
SyntaxKind[SyntaxKind["NumberKeyword"] = 69] = "NumberKeyword";
SyntaxKind[SyntaxKind["SetKeyword"] = 70] = "SetKeyword";
SyntaxKind[SyntaxKind["StringKeyword"] = 71] = "StringKeyword";
SyntaxKind[SyntaxKind["OpenBraceToken"] = 72] = "OpenBraceToken";
SyntaxKind[SyntaxKind["CloseBraceToken"] = 73] = "CloseBraceToken";
SyntaxKind[SyntaxKind["OpenParenToken"] = 74] = "OpenParenToken";
SyntaxKind[SyntaxKind["CloseParenToken"] = 75] = "CloseParenToken";
SyntaxKind[SyntaxKind["OpenBracketToken"] = 76] = "OpenBracketToken";
SyntaxKind[SyntaxKind["CloseBracketToken"] = 77] = "CloseBracketToken";
SyntaxKind[SyntaxKind["DotToken"] = 78] = "DotToken";
SyntaxKind[SyntaxKind["DotDotDotToken"] = 79] = "DotDotDotToken";
SyntaxKind[SyntaxKind["SemicolonToken"] = 80] = "SemicolonToken";
SyntaxKind[SyntaxKind["CommaToken"] = 81] = "CommaToken";
SyntaxKind[SyntaxKind["LessThanToken"] = 82] = "LessThanToken";
SyntaxKind[SyntaxKind["GreaterThanToken"] = 83] = "GreaterThanToken";
SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 84] = "LessThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 85] = "GreaterThanEqualsToken";
SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 86] = "EqualsEqualsToken";
SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 87] = "EqualsGreaterThanToken";
SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 88] = "ExclamationEqualsToken";
SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 89] = "EqualsEqualsEqualsToken";
SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 90] = "ExclamationEqualsEqualsToken";
SyntaxKind[SyntaxKind["PlusToken"] = 91] = "PlusToken";
SyntaxKind[SyntaxKind["MinusToken"] = 92] = "MinusToken";
SyntaxKind[SyntaxKind["AsteriskToken"] = 93] = "AsteriskToken";
SyntaxKind[SyntaxKind["PercentToken"] = 94] = "PercentToken";
SyntaxKind[SyntaxKind["PlusPlusToken"] = 95] = "PlusPlusToken";
SyntaxKind[SyntaxKind["MinusMinusToken"] = 96] = "MinusMinusToken";
SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 97] = "LessThanLessThanToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 98] = "GreaterThanGreaterThanToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 99] = "GreaterThanGreaterThanGreaterThanToken";
SyntaxKind[SyntaxKind["AmpersandToken"] = 100] = "AmpersandToken";
SyntaxKind[SyntaxKind["BarToken"] = 101] = "BarToken";
SyntaxKind[SyntaxKind["CaretToken"] = 102] = "CaretToken";
SyntaxKind[SyntaxKind["ExclamationToken"] = 103] = "ExclamationToken";
SyntaxKind[SyntaxKind["TildeToken"] = 104] = "TildeToken";
SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 105] = "AmpersandAmpersandToken";
SyntaxKind[SyntaxKind["BarBarToken"] = 106] = "BarBarToken";
SyntaxKind[SyntaxKind["QuestionToken"] = 107] = "QuestionToken";
SyntaxKind[SyntaxKind["ColonToken"] = 108] = "ColonToken";
SyntaxKind[SyntaxKind["EqualsToken"] = 109] = "EqualsToken";
SyntaxKind[SyntaxKind["PlusEqualsToken"] = 110] = "PlusEqualsToken";
SyntaxKind[SyntaxKind["MinusEqualsToken"] = 111] = "MinusEqualsToken";
SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 112] = "AsteriskEqualsToken";
SyntaxKind[SyntaxKind["PercentEqualsToken"] = 113] = "PercentEqualsToken";
SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 114] = "LessThanLessThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 115] = "GreaterThanGreaterThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 116] = "GreaterThanGreaterThanGreaterThanEqualsToken";
SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 117] = "AmpersandEqualsToken";
SyntaxKind[SyntaxKind["BarEqualsToken"] = 118] = "BarEqualsToken";
SyntaxKind[SyntaxKind["CaretEqualsToken"] = 119] = "CaretEqualsToken";
SyntaxKind[SyntaxKind["SlashToken"] = 120] = "SlashToken";
SyntaxKind[SyntaxKind["SlashEqualsToken"] = 121] = "SlashEqualsToken";
SyntaxKind[SyntaxKind["SourceUnit"] = 122] = "SourceUnit";
SyntaxKind[SyntaxKind["QualifiedName"] = 123] = "QualifiedName";
SyntaxKind[SyntaxKind["ObjectType"] = 124] = "ObjectType";
SyntaxKind[SyntaxKind["FunctionType"] = 125] = "FunctionType";
SyntaxKind[SyntaxKind["ArrayType"] = 126] = "ArrayType";
SyntaxKind[SyntaxKind["ConstructorType"] = 127] = "ConstructorType";
SyntaxKind[SyntaxKind["GenericType"] = 128] = "GenericType";
SyntaxKind[SyntaxKind["TypeQuery"] = 129] = "TypeQuery";
SyntaxKind[SyntaxKind["TupleType"] = 130] = "TupleType";
SyntaxKind[SyntaxKind["UnionType"] = 131] = "UnionType";
SyntaxKind[SyntaxKind["ParenthesizedType"] = 132] = "ParenthesizedType";
SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 133] = "InterfaceDeclaration";
SyntaxKind[SyntaxKind["FunctionDeclaration"] = 134] = "FunctionDeclaration";
SyntaxKind[SyntaxKind["ModuleDeclaration"] = 135] = "ModuleDeclaration";
SyntaxKind[SyntaxKind["ClassDeclaration"] = 136] = "ClassDeclaration";
SyntaxKind[SyntaxKind["EnumDeclaration"] = 137] = "EnumDeclaration";
SyntaxKind[SyntaxKind["ImportDeclaration"] = 138] = "ImportDeclaration";
SyntaxKind[SyntaxKind["ExportAssignment"] = 139] = "ExportAssignment";
SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 140] = "MemberFunctionDeclaration";
SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 141] = "MemberVariableDeclaration";
SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 142] = "ConstructorDeclaration";
SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 143] = "IndexMemberDeclaration";
SyntaxKind[SyntaxKind["GetAccessor"] = 144] = "GetAccessor";
SyntaxKind[SyntaxKind["SetAccessor"] = 145] = "SetAccessor";
SyntaxKind[SyntaxKind["PropertySignature"] = 146] = "PropertySignature";
SyntaxKind[SyntaxKind["CallSignature"] = 147] = "CallSignature";
SyntaxKind[SyntaxKind["ConstructSignature"] = 148] = "ConstructSignature";
SyntaxKind[SyntaxKind["IndexSignature"] = 149] = "IndexSignature";
SyntaxKind[SyntaxKind["MethodSignature"] = 150] = "MethodSignature";
SyntaxKind[SyntaxKind["Block"] = 151] = "Block";
SyntaxKind[SyntaxKind["IfStatement"] = 152] = "IfStatement";
SyntaxKind[SyntaxKind["VariableStatement"] = 153] = "VariableStatement";
SyntaxKind[SyntaxKind["ExpressionStatement"] = 154] = "ExpressionStatement";
SyntaxKind[SyntaxKind["ReturnStatement"] = 155] = "ReturnStatement";
SyntaxKind[SyntaxKind["SwitchStatement"] = 156] = "SwitchStatement";
SyntaxKind[SyntaxKind["BreakStatement"] = 157] = "BreakStatement";
SyntaxKind[SyntaxKind["ContinueStatement"] = 158] = "ContinueStatement";
SyntaxKind[SyntaxKind["ForStatement"] = 159] = "ForStatement";
SyntaxKind[SyntaxKind["ForInStatement"] = 160] = "ForInStatement";
SyntaxKind[SyntaxKind["EmptyStatement"] = 161] = "EmptyStatement";
SyntaxKind[SyntaxKind["ThrowStatement"] = 162] = "ThrowStatement";
SyntaxKind[SyntaxKind["WhileStatement"] = 163] = "WhileStatement";
SyntaxKind[SyntaxKind["TryStatement"] = 164] = "TryStatement";
SyntaxKind[SyntaxKind["LabeledStatement"] = 165] = "LabeledStatement";
SyntaxKind[SyntaxKind["DoStatement"] = 166] = "DoStatement";
SyntaxKind[SyntaxKind["DebuggerStatement"] = 167] = "DebuggerStatement";
SyntaxKind[SyntaxKind["WithStatement"] = 168] = "WithStatement";
SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 169] = "PrefixUnaryExpression";
SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression";
SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression";
SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression";
SyntaxKind[SyntaxKind["ConditionalExpression"] = 173] = "ConditionalExpression";
SyntaxKind[SyntaxKind["BinaryExpression"] = 174] = "BinaryExpression";
SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 175] = "PostfixUnaryExpression";
SyntaxKind[SyntaxKind["MemberAccessExpression"] = 176] = "MemberAccessExpression";
SyntaxKind[SyntaxKind["InvocationExpression"] = 177] = "InvocationExpression";
SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 178] = "ArrayLiteralExpression";
SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 179] = "ObjectLiteralExpression";
SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 180] = "ObjectCreationExpression";
SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 181] = "ParenthesizedExpression";
SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 182] = "ParenthesizedArrowFunctionExpression";
SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 183] = "SimpleArrowFunctionExpression";
SyntaxKind[SyntaxKind["CastExpression"] = 184] = "CastExpression";
SyntaxKind[SyntaxKind["ElementAccessExpression"] = 185] = "ElementAccessExpression";
SyntaxKind[SyntaxKind["FunctionExpression"] = 186] = "FunctionExpression";
SyntaxKind[SyntaxKind["OmittedExpression"] = 187] = "OmittedExpression";
SyntaxKind[SyntaxKind["TemplateExpression"] = 188] = "TemplateExpression";
SyntaxKind[SyntaxKind["TemplateAccessExpression"] = 189] = "TemplateAccessExpression";
SyntaxKind[SyntaxKind["VariableDeclaration"] = 190] = "VariableDeclaration";
SyntaxKind[SyntaxKind["VariableDeclarator"] = 191] = "VariableDeclarator";
SyntaxKind[SyntaxKind["ArgumentList"] = 192] = "ArgumentList";
SyntaxKind[SyntaxKind["ParameterList"] = 193] = "ParameterList";
SyntaxKind[SyntaxKind["TypeArgumentList"] = 194] = "TypeArgumentList";
SyntaxKind[SyntaxKind["TypeParameterList"] = 195] = "TypeParameterList";
SyntaxKind[SyntaxKind["HeritageClause"] = 196] = "HeritageClause";
SyntaxKind[SyntaxKind["EqualsValueClause"] = 197] = "EqualsValueClause";
SyntaxKind[SyntaxKind["CaseSwitchClause"] = 198] = "CaseSwitchClause";
SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 199] = "DefaultSwitchClause";
SyntaxKind[SyntaxKind["ElseClause"] = 200] = "ElseClause";
SyntaxKind[SyntaxKind["CatchClause"] = 201] = "CatchClause";
SyntaxKind[SyntaxKind["FinallyClause"] = 202] = "FinallyClause";
SyntaxKind[SyntaxKind["TemplateClause"] = 203] = "TemplateClause";
SyntaxKind[SyntaxKind["TypeParameter"] = 204] = "TypeParameter";
SyntaxKind[SyntaxKind["Constraint"] = 205] = "Constraint";
SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 206] = "SimplePropertyAssignment";
SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 207] = "FunctionPropertyAssignment";
SyntaxKind[SyntaxKind["Parameter"] = 208] = "Parameter";
SyntaxKind[SyntaxKind["EnumElement"] = 209] = "EnumElement";
SyntaxKind[SyntaxKind["TypeAnnotation"] = 210] = "TypeAnnotation";
SyntaxKind[SyntaxKind["ComputedPropertyName"] = 211] = "ComputedPropertyName";
SyntaxKind[SyntaxKind["ExternalModuleReference"] = 212] = "ExternalModuleReference";
SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 213] = "ModuleNameModuleReference";
SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword";
SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword";
SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword";
SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword";
SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword";
SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword";
SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword";
SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword";
SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword";
SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword";
SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken";
SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken";
SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation";
SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation";
SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth";
SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth";
SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia";
SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia";
SyntaxKind[SyntaxKind["FirstNode"] = SyntaxKind.SourceUnit] = "FirstNode";
SyntaxKind[SyntaxKind["LastNode"] = SyntaxKind.ModuleNameModuleReference] = "LastNode";
})(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {}));
var SyntaxKind = TypeScript.SyntaxKind;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxFacts;
(function (SyntaxFacts) {
var textToKeywordKind = {
"any": 62 /* AnyKeyword */,
"boolean": 63 /* BooleanKeyword */,
"break": 17 /* BreakKeyword */,
"case": 18 /* CaseKeyword */,
"catch": 19 /* CatchKeyword */,
"class": 46 /* ClassKeyword */,
"continue": 20 /* ContinueKeyword */,
"const": 47 /* ConstKeyword */,
"constructor": 64 /* ConstructorKeyword */,
"debugger": 21 /* DebuggerKeyword */,
"declare": 65 /* DeclareKeyword */,
"default": 22 /* DefaultKeyword */,
"delete": 23 /* DeleteKeyword */,
"do": 24 /* DoKeyword */,
"else": 25 /* ElseKeyword */,
"enum": 48 /* EnumKeyword */,
"export": 49 /* ExportKeyword */,
"extends": 50 /* ExtendsKeyword */,
"false": 26 /* FalseKeyword */,
"finally": 27 /* FinallyKeyword */,
"for": 28 /* ForKeyword */,
"function": 29 /* FunctionKeyword */,
"get": 66 /* GetKeyword */,
"if": 30 /* IfKeyword */,
"implements": 53 /* ImplementsKeyword */,
"import": 51 /* ImportKeyword */,
"in": 31 /* InKeyword */,
"instanceof": 32 /* InstanceOfKeyword */,
"interface": 54 /* InterfaceKeyword */,
"let": 55 /* LetKeyword */,
"module": 67 /* ModuleKeyword */,
"new": 33 /* NewKeyword */,
"null": 34 /* NullKeyword */,
"number": 69 /* NumberKeyword */,
"package": 56 /* PackageKeyword */,
"private": 57 /* PrivateKeyword */,
"protected": 58 /* ProtectedKeyword */,
"public": 59 /* PublicKeyword */,
"require": 68 /* RequireKeyword */,
"return": 35 /* ReturnKeyword */,
"set": 70 /* SetKeyword */,
"static": 60 /* StaticKeyword */,
"string": 71 /* StringKeyword */,
"super": 52 /* SuperKeyword */,
"switch": 36 /* SwitchKeyword */,
"this": 37 /* ThisKeyword */,
"throw": 38 /* ThrowKeyword */,
"true": 39 /* TrueKeyword */,
"try": 40 /* TryKeyword */,
"typeof": 41 /* TypeOfKeyword */,
"var": 42 /* VarKeyword */,
"void": 43 /* VoidKeyword */,
"while": 44 /* WhileKeyword */,
"with": 45 /* WithKeyword */,
"yield": 61 /* YieldKeyword */,
"{": 72 /* OpenBraceToken */,
"}": 73 /* CloseBraceToken */,
"(": 74 /* OpenParenToken */,
")": 75 /* CloseParenToken */,
"[": 76 /* OpenBracketToken */,
"]": 77 /* CloseBracketToken */,
".": 78 /* DotToken */,
"...": 79 /* DotDotDotToken */,
";": 80 /* SemicolonToken */,
",": 81 /* CommaToken */,
"<": 82 /* LessThanToken */,
">": 83 /* GreaterThanToken */,
"<=": 84 /* LessThanEqualsToken */,
">=": 85 /* GreaterThanEqualsToken */,
"==": 86 /* EqualsEqualsToken */,
"=>": 87 /* EqualsGreaterThanToken */,
"!=": 88 /* ExclamationEqualsToken */,
"===": 89 /* EqualsEqualsEqualsToken */,
"!==": 90 /* ExclamationEqualsEqualsToken */,
"+": 91 /* PlusToken */,
"-": 92 /* MinusToken */,
"*": 93 /* AsteriskToken */,
"%": 94 /* PercentToken */,
"++": 95 /* PlusPlusToken */,
"--": 96 /* MinusMinusToken */,
"<<": 97 /* LessThanLessThanToken */,
">>": 98 /* GreaterThanGreaterThanToken */,
">>>": 99 /* GreaterThanGreaterThanGreaterThanToken */,
"&": 100 /* AmpersandToken */,
"|": 101 /* BarToken */,
"^": 102 /* CaretToken */,
"!": 103 /* ExclamationToken */,
"~": 104 /* TildeToken */,
"&&": 105 /* AmpersandAmpersandToken */,
"||": 106 /* BarBarToken */,
"?": 107 /* QuestionToken */,
":": 108 /* ColonToken */,
"=": 109 /* EqualsToken */,
"+=": 110 /* PlusEqualsToken */,
"-=": 111 /* MinusEqualsToken */,
"*=": 112 /* AsteriskEqualsToken */,
"%=": 113 /* PercentEqualsToken */,
"<<=": 114 /* LessThanLessThanEqualsToken */,
">>=": 115 /* GreaterThanGreaterThanEqualsToken */,
">>>=": 116 /* GreaterThanGreaterThanGreaterThanEqualsToken */,
"&=": 117 /* AmpersandEqualsToken */,
"|=": 118 /* BarEqualsToken */,
"^=": 119 /* CaretEqualsToken */,
"/": 120 /* SlashToken */,
"/=": 121 /* SlashEqualsToken */
};
var kindToText = new Array();
for (var name in textToKeywordKind) {
if (textToKeywordKind.hasOwnProperty(name)) {
kindToText[textToKeywordKind[name]] = name;
}
}
kindToText[64 /* ConstructorKeyword */] = "constructor";
function getTokenKind(text) {
if (textToKeywordKind.hasOwnProperty(text)) {
return textToKeywordKind[text];
}
return 0 /* None */;
}
SyntaxFacts.getTokenKind = getTokenKind;
function getText(kind) {
var result = kindToText[kind];
return result;
}
SyntaxFacts.getText = getText;
function isAnyKeyword(kind) {
return kind >= TypeScript.SyntaxKind.FirstKeyword && kind <= TypeScript.SyntaxKind.LastKeyword;
}
SyntaxFacts.isAnyKeyword = isAnyKeyword;
function isAnyPunctuation(kind) {
return kind >= TypeScript.SyntaxKind.FirstPunctuation && kind <= TypeScript.SyntaxKind.LastPunctuation;
}
SyntaxFacts.isAnyPunctuation = isAnyPunctuation;
function isPrefixUnaryExpressionOperatorToken(tokenKind) {
switch (tokenKind) {
case 91 /* PlusToken */:
case 92 /* MinusToken */:
case 104 /* TildeToken */:
case 103 /* ExclamationToken */:
case 95 /* PlusPlusToken */:
case 96 /* MinusMinusToken */:
return true;
default:
return false;
}
}
SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken;
function isBinaryExpressionOperatorToken(tokenKind) {
switch (tokenKind) {
case 93 /* AsteriskToken */:
case 120 /* SlashToken */:
case 94 /* PercentToken */:
case 91 /* PlusToken */:
case 92 /* MinusToken */:
case 97 /* LessThanLessThanToken */:
case 98 /* GreaterThanGreaterThanToken */:
case 99 /* GreaterThanGreaterThanGreaterThanToken */:
case 82 /* LessThanToken */:
case 83 /* GreaterThanToken */:
case 84 /* LessThanEqualsToken */:
case 85 /* GreaterThanEqualsToken */:
case 32 /* InstanceOfKeyword */:
case 31 /* InKeyword */:
case 86 /* EqualsEqualsToken */:
case 88 /* ExclamationEqualsToken */:
case 89 /* EqualsEqualsEqualsToken */:
case 90 /* ExclamationEqualsEqualsToken */:
case 100 /* AmpersandToken */:
case 102 /* CaretToken */:
case 101 /* BarToken */:
case 105 /* AmpersandAmpersandToken */:
case 106 /* BarBarToken */:
case 118 /* BarEqualsToken */:
case 117 /* AmpersandEqualsToken */:
case 119 /* CaretEqualsToken */:
case 114 /* LessThanLessThanEqualsToken */:
case 115 /* GreaterThanGreaterThanEqualsToken */:
case 116 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
case 110 /* PlusEqualsToken */:
case 111 /* MinusEqualsToken */:
case 112 /* AsteriskEqualsToken */:
case 121 /* SlashEqualsToken */:
case 113 /* PercentEqualsToken */:
case 109 /* EqualsToken */:
case 81 /* CommaToken */:
return true;
default:
return false;
}
}
SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken;
function isAssignmentOperatorToken(tokenKind) {
switch (tokenKind) {
case 118 /* BarEqualsToken */:
case 117 /* AmpersandEqualsToken */:
case 119 /* CaretEqualsToken */:
case 114 /* LessThanLessThanEqualsToken */:
case 115 /* GreaterThanGreaterThanEqualsToken */:
case 116 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
case 110 /* PlusEqualsToken */:
case 111 /* MinusEqualsToken */:
case 112 /* AsteriskEqualsToken */:
case 121 /* SlashEqualsToken */:
case 113 /* PercentEqualsToken */:
case 109 /* EqualsToken */:
return true;
default:
return false;
}
}
SyntaxFacts.isAssignmentOperatorToken = isAssignmentOperatorToken;
function isType(kind) {
switch (kind) {
case 126 /* ArrayType */:
case 62 /* AnyKeyword */:
case 69 /* NumberKeyword */:
case 63 /* BooleanKeyword */:
case 71 /* StringKeyword */:
case 43 /* VoidKeyword */:
case 125 /* FunctionType */:
case 124 /* ObjectType */:
case 127 /* ConstructorType */:
case 129 /* TypeQuery */:
case 128 /* GenericType */:
case 123 /* QualifiedName */:
case 9 /* IdentifierName */:
return true;
}
return false;
}
SyntaxFacts.isType = isType;
})(SyntaxFacts = TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Scanner;
(function (Scanner) {
TypeScript.Debug.assert(TypeScript.SyntaxKind.LastToken <= 127);
var ScannerConstants;
(function (ScannerConstants) {
ScannerConstants[ScannerConstants["LargeTokenFullWidthShift"] = 3] = "LargeTokenFullWidthShift";
ScannerConstants[ScannerConstants["WhitespaceTrivia"] = 0x01] = "WhitespaceTrivia";
ScannerConstants[ScannerConstants["NewlineTrivia"] = 0x02] = "NewlineTrivia";
ScannerConstants[ScannerConstants["CommentTrivia"] = 0x04] = "CommentTrivia";
ScannerConstants[ScannerConstants["TriviaMask"] = 0x07] = "TriviaMask";
ScannerConstants[ScannerConstants["KindMask"] = 0x7F] = "KindMask";
ScannerConstants[ScannerConstants["IsVariableWidthMask"] = 0x80] = "IsVariableWidthMask";
})(ScannerConstants || (ScannerConstants = {}));
function largeTokenPackData(fullWidth, leadingTriviaInfo) {
return (fullWidth << 3 /* LargeTokenFullWidthShift */) | leadingTriviaInfo;
}
function largeTokenUnpackFullWidth(packedFullWidthAndInfo) {
return packedFullWidthAndInfo >> 3 /* LargeTokenFullWidthShift */;
}
function largeTokenUnpackLeadingTriviaInfo(packedFullWidthAndInfo) {
return packedFullWidthAndInfo & 7 /* TriviaMask */;
}
function largeTokenUnpackHasLeadingTrivia(packed) {
return largeTokenUnpackLeadingTriviaInfo(packed) !== 0;
}
function hasComment(info) {
return (info & 4 /* CommentTrivia */) !== 0;
}
function hasNewLine(info) {
return (info & 2 /* NewlineTrivia */) !== 0;
}
function largeTokenUnpackHasLeadingNewLine(packed) {
return hasNewLine(largeTokenUnpackLeadingTriviaInfo(packed));
}
function largeTokenUnpackHasLeadingComment(packed) {
return hasComment(largeTokenUnpackLeadingTriviaInfo(packed));
}
var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, 0);
var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false);
var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false);
for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) {
if ((character >= 97 /* a */ && character <= 122 /* z */) || (character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) {
isIdentifierStartCharacter[character] = true;
isIdentifierPartCharacter[character] = true;
}
else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) {
isIdentifierPartCharacter[character] = true;
}
}
for (var keywordKind = TypeScript.SyntaxKind.FirstKeyword; keywordKind <= TypeScript.SyntaxKind.LastKeyword; keywordKind++) {
var keyword = TypeScript.SyntaxFacts.getText(keywordKind);
isKeywordStartCharacter[keyword.charCodeAt(0)] = 1;
}
function isContextualToken(token) {
switch (token.kind) {
case 10 /* RegularExpressionLiteral */:
case 98 /* GreaterThanGreaterThanToken */:
case 99 /* GreaterThanGreaterThanGreaterThanToken */:
case 85 /* GreaterThanEqualsToken */:
case 115 /* GreaterThanGreaterThanEqualsToken */:
case 116 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
return true;
case 15 /* TemplateMiddleToken */:
case 16 /* TemplateEndToken */:
return true;
default:
return token.isKeywordConvertedToIdentifier();
}
}
Scanner.isContextualToken = isContextualToken;
var lastTokenInfo = { leadingTriviaWidth: -1 };
var lastTokenInfoTokenID = -1;
var triviaScanner = createScannerInternal(2 /* Latest */, TypeScript.SimpleText.fromString(""), function () {
});
function fillSizeInfo(token, text) {
if (lastTokenInfoTokenID !== TypeScript.syntaxID(token)) {
triviaScanner.fillTokenInfo(token, text, lastTokenInfo);
lastTokenInfoTokenID = TypeScript.syntaxID(token);
}
}
function fullText(token, text) {
return text.substr(token.fullStart(), token.fullWidth());
}
function leadingTrivia(token, text) {
if (!token.hasLeadingTrivia()) {
return TypeScript.Syntax.emptyTriviaList;
}
return triviaScanner.scanTrivia(token, text);
}
function leadingTriviaWidth(token, text) {
if (!token.hasLeadingTrivia()) {
return 0;
}
fillSizeInfo(token, text);
return lastTokenInfo.leadingTriviaWidth;
}
function tokenIsIncrementallyUnusable(token) {
return false;
}
var FixedWidthTokenWithNoTrivia = (function () {
function FixedWidthTokenWithNoTrivia(_fullStart, kind) {
this._fullStart = _fullStart;
this.kind = kind;
}
FixedWidthTokenWithNoTrivia.prototype.setFullStart = function (fullStart) {
this._fullStart = fullStart;
};
FixedWidthTokenWithNoTrivia.prototype.childAt = function (index) {
throw TypeScript.Errors.invalidOperation();
};
FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.isKeywordConvertedToIdentifier = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.fullText = function () {
return TypeScript.SyntaxFacts.getText(this.kind);
};
FixedWidthTokenWithNoTrivia.prototype.text = function () {
return this.fullText();
};
FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () {
return TypeScript.Syntax.emptyTriviaList;
};
FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () {
return 0;
};
FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () {
return fixedWidthTokenLength(this.kind);
};
FixedWidthTokenWithNoTrivia.prototype.fullStart = function () {
return this._fullStart;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingNewLine = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingSkippedToken = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.hasLeadingComment = function () {
return false;
};
FixedWidthTokenWithNoTrivia.prototype.clone = function () {
return new FixedWidthTokenWithNoTrivia(this._fullStart, this.kind);
};
return FixedWidthTokenWithNoTrivia;
})();
FixedWidthTokenWithNoTrivia.prototype.childCount = 0;
var LargeScannerToken = (function () {
function LargeScannerToken(_fullStart, kind, _packedFullWidthAndInfo, cachedText) {
this._fullStart = _fullStart;
this.kind = kind;
this._packedFullWidthAndInfo = _packedFullWidthAndInfo;
if (cachedText !== undefined) {
this.cachedText = cachedText;
}
}
LargeScannerToken.prototype.setFullStart = function (fullStart) {
this._fullStart = fullStart;
};
LargeScannerToken.prototype.childAt = function (index) {
throw TypeScript.Errors.invalidOperation();
};
LargeScannerToken.prototype.syntaxTreeText = function (text) {
var result = text || TypeScript.syntaxTree(this).text;
TypeScript.Debug.assert(result);
return result;
};
LargeScannerToken.prototype.isIncrementallyUnusable = function () {
return tokenIsIncrementallyUnusable(this);
};
LargeScannerToken.prototype.isKeywordConvertedToIdentifier = function () {
return false;
};
LargeScannerToken.prototype.fullText = function (text) {
return fullText(this, this.syntaxTreeText(text));
};
LargeScannerToken.prototype.text = function () {
var cachedText = this.cachedText;
return cachedText !== undefined ? cachedText : TypeScript.SyntaxFacts.getText(this.kind);
};
LargeScannerToken.prototype.leadingTrivia = function (text) {
return leadingTrivia(this, this.syntaxTreeText(text));
};
LargeScannerToken.prototype.leadingTriviaWidth = function (text) {
return leadingTriviaWidth(this, this.syntaxTreeText(text));
};
LargeScannerToken.prototype.fullWidth = function () {
return largeTokenUnpackFullWidth(this._packedFullWidthAndInfo);
};
LargeScannerToken.prototype.fullStart = function () {
return this._fullStart;
};
LargeScannerToken.prototype.hasLeadingTrivia = function () {
return largeTokenUnpackHasLeadingTrivia(this._packedFullWidthAndInfo);
};
LargeScannerToken.prototype.hasLeadingNewLine = function () {
return largeTokenUnpackHasLeadingNewLine(this._packedFullWidthAndInfo);
};
LargeScannerToken.prototype.hasLeadingComment = function () {
return largeTokenUnpackHasLeadingComment(this._packedFullWidthAndInfo);
};
LargeScannerToken.prototype.hasLeadingSkippedToken = function () {
return false;
};
LargeScannerToken.prototype.clone = function () {
return new LargeScannerToken(this._fullStart, this.kind, this._packedFullWidthAndInfo, this.cachedText);
};
return LargeScannerToken;
})();
LargeScannerToken.prototype.childCount = 0;
function createScanner(languageVersion, text, reportDiagnostic) {
var scanner = createScannerInternal(languageVersion, text, reportDiagnostic);
return {
setIndex: scanner.setIndex,
scan: scanner.scan
};
}
Scanner.createScanner = createScanner;
function createScannerInternal(languageVersion, text, reportDiagnostic) {
var str;
var index;
var start;
var end;
function setIndex(_index) {
index = _index;
}
function reset(_text, _start, _end) {
var textLength = _text.length();
TypeScript.Debug.assert(_start <= textLength, "Token's start was not within the bounds of text.");
TypeScript.Debug.assert(_end <= textLength, "Token's end was not within the bounds of text:");
if (!str || text !== _text) {
text = _text;
str = _text.substr(0, textLength);
}
start = _start;
end = _end;
index = _start;
}
function scan(allowContextualToken) {
var fullStart = index;
var leadingTriviaInfo = scanTriviaInfo();
var start = index;
var kindAndIsVariableWidth = scanSyntaxKind(allowContextualToken);
var fullEnd = index;
var fullWidth = fullEnd - fullStart;
var kind = kindAndIsVariableWidth & 127 /* KindMask */;
var isFixedWidth = kind >= TypeScript.SyntaxKind.FirstFixedWidth && kind <= TypeScript.SyntaxKind.LastFixedWidth && ((kindAndIsVariableWidth & 128 /* IsVariableWidthMask */) === 0);
if (isFixedWidth && leadingTriviaInfo === 0) {
return new FixedWidthTokenWithNoTrivia(fullStart, kind);
}
else {
var packedFullWidthAndInfo = largeTokenPackData(fullWidth, leadingTriviaInfo);
var cachedText = isFixedWidth ? undefined : text.substr(start, fullEnd - start);
return new LargeScannerToken(fullStart, kind, packedFullWidthAndInfo, cachedText);
}
}
function scanTrivia(parent, text) {
var tokenFullStart = parent.fullStart();
var tokenStart = tokenFullStart + leadingTriviaWidth(parent, text);
reset(text, tokenFullStart, tokenStart);
var trivia = [];
while (true) {
if (index < end) {
var ch = str.charCodeAt(index);
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
trivia.push(scanWhitespaceTrivia());
continue;
case 47 /* slash */:
var ch2 = str.charCodeAt(index + 1);
if (ch2 === 47 /* slash */) {
trivia.push(scanSingleLineCommentTrivia());
continue;
}
if (ch2 === 42 /* asterisk */) {
trivia.push(scanMultiLineCommentTrivia());
continue;
}
throw TypeScript.Errors.invalidOperation();
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
trivia.push(scanLineTerminatorSequenceTrivia(ch));
continue;
default:
throw TypeScript.Errors.invalidOperation();
}
}
var triviaList = TypeScript.Syntax.triviaList(trivia);
triviaList.parent = parent;
return triviaList;
}
}
function scanTriviaInfo() {
var result = 0;
var _end = end;
while (index < _end) {
var ch = str.charCodeAt(index);
switch (ch) {
case 9 /* tab */:
case 32 /* space */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
index++;
result |= 1 /* WhitespaceTrivia */;
continue;
case 13 /* carriageReturn */:
if ((index + 1) < end && str.charCodeAt(index + 1) === 10 /* lineFeed */) {
index++;
}
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
index++;
result |= 2 /* NewlineTrivia */;
continue;
case 47 /* slash */:
if ((index + 1) < _end) {
var ch2 = str.charCodeAt(index + 1);
if (ch2 === 47 /* slash */) {
result |= 4 /* CommentTrivia */;
skipSingleLineCommentTrivia();
continue;
}
if (ch2 === 42 /* asterisk */) {
result |= 4 /* CommentTrivia */;
skipMultiLineCommentTrivia();
continue;
}
}
return result;
default:
if (ch > 127 /* maxAsciiCharacter */ && slowScanWhitespaceTriviaInfo(ch)) {
result |= 1 /* WhitespaceTrivia */;
continue;
}
return result;
}
}
return result;
}
function slowScanWhitespaceTriviaInfo(ch) {
switch (ch) {
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 65279 /* byteOrderMark */:
index++;
return true;
default:
return false;
}
}
function isNewLineCharacter(ch) {
switch (ch) {
case 13 /* carriageReturn */:
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
return true;
default:
return false;
}
}
function scanWhitespaceTrivia() {
var absoluteStartIndex = index;
while (true) {
var ch = str.charCodeAt(index);
switch (ch) {
case 32 /* space */:
case 160 /* nonBreakingSpace */:
case 8192 /* enQuad */:
case 8193 /* emQuad */:
case 8194 /* enSpace */:
case 8195 /* emSpace */:
case 8196 /* threePerEmSpace */:
case 8197 /* fourPerEmSpace */:
case 8198 /* sixPerEmSpace */:
case 8199 /* figureSpace */:
case 8200 /* punctuationSpace */:
case 8201 /* thinSpace */:
case 8202 /* hairSpace */:
case 8203 /* zeroWidthSpace */:
case 8239 /* narrowNoBreakSpace */:
case 12288 /* ideographicSpace */:
case 9 /* tab */:
case 11 /* verticalTab */:
case 12 /* formFeed */:
case 65279 /* byteOrderMark */:
index++;
continue;
}
break;
}
return createTrivia(2 /* WhitespaceTrivia */, absoluteStartIndex);
}
function createTrivia(kind, absoluteStartIndex) {
var fullWidth = index - absoluteStartIndex;
return TypeScript.Syntax.deferredTrivia(kind, text, absoluteStartIndex, fullWidth);
}
function scanSingleLineCommentTrivia() {
var absoluteStartIndex = index;
skipSingleLineCommentTrivia();
return createTrivia(5 /* SingleLineCommentTrivia */, absoluteStartIndex);
}
function skipSingleLineCommentTrivia() {
index += 2;
while (index < end) {
if (isNewLineCharacter(str.charCodeAt(index))) {
return;
}
index++;
}
}
function scanMultiLineCommentTrivia() {
var absoluteStartIndex = index;
skipMultiLineCommentTrivia();
return createTrivia(4 /* MultiLineCommentTrivia */, absoluteStartIndex);
}
function skipMultiLineCommentTrivia() {
var _index = index + 2;
var _end = end;
index += 2;
while (true) {
if (_index === _end) {
reportDiagnostic(end, 0, TypeScript.DiagnosticCode._0_expected, ["*/"]);
break;
}
if ((_index + 1) < _end && str.charCodeAt(_index) === 42 /* asterisk */ && str.charCodeAt(_index + 1) === 47 /* slash */) {
_index += 2;
break;
}
_index++;
}
index = _index;
}
function scanLineTerminatorSequenceTrivia(ch) {
var absoluteStartIndex = index;
skipLineTerminatorSequence(ch);
return createTrivia(3 /* NewLineTrivia */, absoluteStartIndex);
}
function skipLineTerminatorSequence(ch) {
index++;
if (ch === 13 /* carriageReturn */ && str.charCodeAt(index) === 10 /* lineFeed */) {
index++;
}
}
function scanSyntaxKind(allowContextualToken) {
if (index >= end) {
return 8 /* EndOfFileToken */;
}
var character = str.charCodeAt(index);
index++;
switch (character) {
case 33 /* exclamation */: return scanExclamationToken();
case 34 /* doubleQuote */: return scanStringLiteral(character);
case 37 /* percent */: return scanPercentToken();
case 38 /* ampersand */: return scanAmpersandToken();
case 39 /* singleQuote */: return scanStringLiteral(character);
case 40 /* openParen */: return 74 /* OpenParenToken */;
case 41 /* closeParen */: return 75 /* CloseParenToken */;
case 42 /* asterisk */: return scanAsteriskToken();
case 43 /* plus */: return scanPlusToken();
case 44 /* comma */: return 81 /* CommaToken */;
case 45 /* minus */: return scanMinusToken();
case 46 /* dot */: return scanDotToken();
case 47 /* slash */: return scanSlashToken(allowContextualToken);
case 48 /* _0 */:
case 49 /* _1 */:
case 50 /* _2 */:
case 51 /* _3 */:
case 52 /* _4 */:
case 53 /* _5 */:
case 54 /* _6 */:
case 55 /* _7 */:
case 56 /* _8 */:
case 57 /* _9 */:
return scanNumericLiteral(character);
case 58 /* colon */: return 108 /* ColonToken */;
case 59 /* semicolon */: return 80 /* SemicolonToken */;
case 60 /* lessThan */: return scanLessThanToken();
case 61 /* equals */: return scanEqualsToken();
case 62 /* greaterThan */: return scanGreaterThanToken(allowContextualToken);
case 63 /* question */: return 107 /* QuestionToken */;
case 91 /* openBracket */: return 76 /* OpenBracketToken */;
case 93 /* closeBracket */: return 77 /* CloseBracketToken */;
case 94 /* caret */: return scanCaretToken();
case 96 /* backtick */: return scanTemplateToken(character);
case 123 /* openBrace */: return 72 /* OpenBraceToken */;
case 124 /* bar */: return scanBarToken();
case 125 /* closeBrace */: return scanCloseBraceToken(allowContextualToken, character);
case 126 /* tilde */: return 104 /* TildeToken */;
}
if (isIdentifierStartCharacter[character]) {
var result = tryFastScanIdentifierOrKeyword(character);
if (result !== 0 /* None */) {
return result;
}
}
index--;
if (isIdentifierStart(peekCharOrUnicodeEscape())) {
return slowScanIdentifierOrKeyword();
}
var text = String.fromCharCode(character);
var messageText = getErrorMessageText(text);
reportDiagnostic(index, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText]);
index++;
return 7 /* ErrorToken */;
}
function isIdentifierStart(interpretedChar) {
if (isIdentifierStartCharacter[interpretedChar]) {
return true;
}
return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, languageVersion);
}
function isIdentifierPart(interpretedChar) {
if (isIdentifierPartCharacter[interpretedChar]) {
return true;
}
return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, languageVersion);
}
function tryFastScanIdentifierOrKeyword(firstCharacter) {
var startIndex = index;
var character = firstCharacter;
while (index < end) {
character = str.charCodeAt(index);
if (!isIdentifierPartCharacter[character]) {
break;
}
index++;
}
if (index < end && (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */)) {
index = startIndex;
return 0 /* None */;
}
else {
if (isKeywordStartCharacter[firstCharacter]) {
return TypeScript.ScannerUtilities.identifierKind(str, startIndex - 1, index - startIndex + 1);
}
else {
return 9 /* IdentifierName */;
}
}
}
function slowScanIdentifierOrKeyword() {
var startIndex = index;
do {
scanCharOrUnicodeEscape();
} while (isIdentifierPart(peekCharOrUnicodeEscape()));
var length = index - startIndex;
var text = str.substr(startIndex, length);
var valueText = TypeScript.massageEscapes(text);
var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText);
if (keywordKind >= TypeScript.SyntaxKind.FirstKeyword && keywordKind <= TypeScript.SyntaxKind.LastKeyword) {
return keywordKind | 128 /* IsVariableWidthMask */;
}
return 9 /* IdentifierName */;
}
function scanNumericLiteral(ch) {
if (isHexNumericLiteral(ch)) {
scanHexNumericLiteral();
}
else if (isOctalNumericLiteral(ch)) {
scanOctalNumericLiteral();
}
else {
scanDecimalNumericLiteral();
}
return 11 /* NumericLiteral */;
}
function isOctalNumericLiteral(ch) {
return ch === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(str.charCodeAt(index));
}
function scanOctalNumericLiteral() {
var start = index - 1;
while (TypeScript.CharacterInfo.isOctalDigit(str.charCodeAt(index))) {
index++;
}
if (languageVersion >= 1 /* ES5 */) {
reportDiagnostic(start, index - start, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, undefined);
}
}
function scanDecimalDigits() {
while (TypeScript.CharacterInfo.isDecimalDigit(str.charCodeAt(index))) {
index++;
}
}
function scanDecimalNumericLiteral() {
scanDecimalDigits();
if (str.charCodeAt(index) === 46 /* dot */) {
index++;
}
scanDecimalNumericLiteralAfterDot();
}
function scanDecimalNumericLiteralAfterDot() {
scanDecimalDigits();
var ch = str.charCodeAt(index);
if (ch === 101 /* e */ || ch === 69 /* E */) {
var nextChar1 = str.charCodeAt(index + 1);
if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) {
index++;
scanDecimalDigits();
}
else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) {
var nextChar2 = str.charCodeAt(index + 2);
if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) {
index += 2;
scanDecimalDigits();
}
}
}
}
function scanHexNumericLiteral() {
index++;
while (TypeScript.CharacterInfo.isHexDigit(str.charCodeAt(index))) {
index++;
}
}
function isHexNumericLiteral(ch) {
if (ch === 48 /* _0 */) {
var ch = str.charCodeAt(index);
if (ch === 120 /* x */ || ch === 88 /* X */) {
return TypeScript.CharacterInfo.isHexDigit(str.charCodeAt(index + 1));
}
}
return false;
}
function scanLessThanToken() {
var ch0 = str.charCodeAt(index);
if (ch0 === 61 /* equals */) {
index++;
return 84 /* LessThanEqualsToken */;
}
else if (ch0 === 60 /* lessThan */) {
index++;
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 114 /* LessThanLessThanEqualsToken */;
}
else {
return 97 /* LessThanLessThanToken */;
}
}
else {
return 82 /* LessThanToken */;
}
}
function scanGreaterThanToken(allowContextualToken) {
if (allowContextualToken) {
var ch0 = str.charCodeAt(index);
if (ch0 === 62 /* greaterThan */) {
index++;
var ch1 = str.charCodeAt(index);
if (ch1 === 62 /* greaterThan */) {
index++;
var ch2 = str.charCodeAt(index);
if (ch2 === 61 /* equals */) {
index++;
return 116 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
}
else {
return 99 /* GreaterThanGreaterThanGreaterThanToken */;
}
}
else if (ch1 === 61 /* equals */) {
index++;
return 115 /* GreaterThanGreaterThanEqualsToken */;
}
else {
return 98 /* GreaterThanGreaterThanToken */;
}
}
else if (ch0 === 61 /* equals */) {
index++;
return 85 /* GreaterThanEqualsToken */;
}
}
return 83 /* GreaterThanToken */;
}
function scanBarToken() {
var ch = str.charCodeAt(index);
if (ch === 61 /* equals */) {
index++;
return 118 /* BarEqualsToken */;
}
else if (ch === 124 /* bar */) {
index++;
return 106 /* BarBarToken */;
}
else {
return 101 /* BarToken */;
}
}
function scanCaretToken() {
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 119 /* CaretEqualsToken */;
}
else {
return 102 /* CaretToken */;
}
}
function scanCloseBraceToken(allowContextualToken, startChar) {
return allowContextualToken ? scanTemplateToken(startChar) : 73 /* CloseBraceToken */;
}
function scanTemplateToken(startChar) {
var startedWithBacktick = startChar === 96 /* backtick */;
while (true) {
if (index === end) {
reportDiagnostic(end, 0, TypeScript.DiagnosticCode._0_expected, ["`"]);
break;
}
var ch = str.charCodeAt(index);
index++;
if (ch === 96 /* backtick */) {
break;
}
if (ch === 36 /* $ */ && index < end && str.charCodeAt(index) === 123 /* openBrace */) {
index++;
return startedWithBacktick ? 14 /* TemplateStartToken */ : 15 /* TemplateMiddleToken */;
}
}
return startedWithBacktick ? 13 /* NoSubstitutionTemplateToken */ : 16 /* TemplateEndToken */;
}
function scanAmpersandToken() {
var character = str.charCodeAt(index);
if (character === 61 /* equals */) {
index++;
return 117 /* AmpersandEqualsToken */;
}
else if (character === 38 /* ampersand */) {
index++;
return 105 /* AmpersandAmpersandToken */;
}
else {
return 100 /* AmpersandToken */;
}
}
function scanPercentToken() {
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 113 /* PercentEqualsToken */;
}
else {
return 94 /* PercentToken */;
}
}
function scanMinusToken() {
var character = str.charCodeAt(index);
if (character === 61 /* equals */) {
index++;
return 111 /* MinusEqualsToken */;
}
else if (character === 45 /* minus */) {
index++;
return 96 /* MinusMinusToken */;
}
else {
return 92 /* MinusToken */;
}
}
function scanPlusToken() {
var character = str.charCodeAt(index);
if (character === 61 /* equals */) {
index++;
return 110 /* PlusEqualsToken */;
}
else if (character === 43 /* plus */) {
index++;
return 95 /* PlusPlusToken */;
}
else {
return 91 /* PlusToken */;
}
}
function scanAsteriskToken() {
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 112 /* AsteriskEqualsToken */;
}
else {
return 93 /* AsteriskToken */;
}
}
function scanEqualsToken() {
var character = str.charCodeAt(index);
if (character === 61 /* equals */) {
index++;
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 89 /* EqualsEqualsEqualsToken */;
}
else {
return 86 /* EqualsEqualsToken */;
}
}
else if (character === 62 /* greaterThan */) {
index++;
return 87 /* EqualsGreaterThanToken */;
}
else {
return 109 /* EqualsToken */;
}
}
function scanDotToken() {
var nextChar = str.charCodeAt(index);
if (TypeScript.CharacterInfo.isDecimalDigit(nextChar)) {
scanDecimalNumericLiteralAfterDot();
return 11 /* NumericLiteral */;
}
if (nextChar === 46 /* dot */ && str.charCodeAt(index + 1) === 46 /* dot */) {
index += 2;
return 79 /* DotDotDotToken */;
}
else {
return 78 /* DotToken */;
}
}
function scanSlashToken(allowContextualToken) {
if (allowContextualToken) {
var result = tryScanRegularExpressionToken();
if (result !== 0 /* None */) {
return result;
}
}
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 121 /* SlashEqualsToken */;
}
else {
return 120 /* SlashToken */;
}
}
function tryScanRegularExpressionToken() {
var startIndex = index;
var inEscape = false;
var inCharacterClass = false;
while (true) {
var ch = str.charCodeAt(index);
if (isNaN(ch) || isNewLineCharacter(ch)) {
index = startIndex;
return 0 /* None */;
}
index++;
if (inEscape) {
inEscape = false;
continue;
}
switch (ch) {
case 92 /* backslash */:
inEscape = true;
continue;
case 91 /* openBracket */:
inCharacterClass = true;
continue;
case 93 /* closeBracket */:
inCharacterClass = false;
continue;
case 47 /* slash */:
if (inCharacterClass) {
continue;
}
break;
default:
continue;
}
break;
}
while (isIdentifierPartCharacter[str.charCodeAt(index)]) {
index++;
}
return 10 /* RegularExpressionLiteral */;
}
function scanExclamationToken() {
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
if (str.charCodeAt(index) === 61 /* equals */) {
index++;
return 90 /* ExclamationEqualsEqualsToken */;
}
else {
return 88 /* ExclamationEqualsToken */;
}
}
else {
return 103 /* ExclamationToken */;
}
}
function getErrorMessageText(text) {
if (text === "\\") {
return '"\\"';
}
return JSON.stringify(text);
}
function skipEscapeSequence() {
var rewindPoint = index;
index++;
var ch = str.charCodeAt(index);
if (isNaN(ch)) {
return;
}
index++;
switch (ch) {
case 120 /* x */:
case 117 /* u */:
index = rewindPoint;
var value = scanUnicodeOrHexEscape(true);
break;
case 13 /* carriageReturn */:
if (str.charCodeAt(index) === 10 /* lineFeed */) {
index++;
}
break;
default:
break;
}
}
function scanStringLiteral(quoteCharacter) {
while (true) {
var ch = str.charCodeAt(index);
if (ch === 92 /* backslash */) {
skipEscapeSequence();
}
else if (ch === quoteCharacter) {
index++;
break;
}
else if (isNaN(ch) || isNewLineCharacter(ch)) {
reportDiagnostic(Math.min(index, end), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, undefined);
break;
}
else {
index++;
}
}
return 12 /* StringLiteral */;
}
function isUnicodeEscape(character) {
return character === 92 /* backslash */ && str.charCodeAt(index + 1) === 117 /* u */;
}
function peekCharOrUnicodeEscape() {
var character = str.charCodeAt(index);
if (isUnicodeEscape(character)) {
return peekUnicodeOrHexEscape();
}
else {
return character;
}
}
function peekUnicodeOrHexEscape() {
var startIndex = index;
var ch = scanUnicodeOrHexEscape(false);
index = startIndex;
return ch;
}
function scanCharOrUnicodeEscape() {
if (str.charCodeAt(index) === 92 /* backslash */ && str.charCodeAt(index + 1) === 117 /* u */) {
scanUnicodeOrHexEscape(true);
}
else {
index++;
}
}
function scanUnicodeOrHexEscape(report) {
var start = index;
var character = str.charCodeAt(index);
index++;
character = str.charCodeAt(index);
var intChar = 0;
index++;
var count = character === 117 /* u */ ? 4 : 2;
for (var i = 0; i < count; i++) {
var ch2 = str.charCodeAt(index);
if (!TypeScript.CharacterInfo.isHexDigit(ch2)) {
if (report) {
reportDiagnostic(start, index - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, undefined);
}
break;
}
intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2);
index++;
}
return intChar;
}
function fillTokenInfo(token, text, tokenInfo) {
var fullStart = token.fullStart();
var fullEnd = fullStart + token.fullWidth();
reset(text, fullStart, fullEnd);
scanTriviaInfo();
var start = index;
tokenInfo.leadingTriviaWidth = start - fullStart;
}
reset(text, 0, text.length());
return {
setIndex: setIndex,
scan: scan,
fillTokenInfo: fillTokenInfo,
scanTrivia: scanTrivia
};
}
function isValidIdentifier(text, languageVersion) {
var hadError = false;
var scanner = createScanner(languageVersion, text, function () { return hadError = true; });
var token = scanner.scan(false);
return !hadError && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && TypeScript.width(token) === text.length();
}
Scanner.isValidIdentifier = isValidIdentifier;
function createParserSource(fileName, text, languageVersion) {
var _absolutePosition = 0;
var _tokenDiagnostics = [];
var rewindPointPool = [];
var rewindPointPoolCount = 0;
var lastDiagnostic = undefined;
var reportDiagnostic = function (position, fullWidth, diagnosticKey, args) {
lastDiagnostic = new TypeScript.Diagnostic(fileName, text.lineMap(), position, fullWidth, diagnosticKey, args);
};
var slidingWindow = new TypeScript.SlidingWindow(fetchNextItem, TypeScript.ArrayUtilities.createArray(1024, undefined), undefined);
var scanner = createScanner(languageVersion, text, reportDiagnostic);
function release() {
slidingWindow = undefined;
scanner = undefined;
_tokenDiagnostics = [];
rewindPointPool = [];
lastDiagnostic = undefined;
reportDiagnostic = undefined;
}
function currentNode() {
return undefined;
}
function consumeNode(node) {
throw TypeScript.Errors.invalidOperation();
}
function absolutePosition() {
return _absolutePosition;
}
function tokenDiagnostics() {
return _tokenDiagnostics;
}
function getOrCreateRewindPoint() {
if (rewindPointPoolCount === 0) {
return {};
}
rewindPointPoolCount--;
var result = rewindPointPool[rewindPointPoolCount];
rewindPointPool[rewindPointPoolCount] = undefined;
return result;
}
function getRewindPoint() {
var slidingWindowIndex = slidingWindow.getAndPinAbsoluteIndex();
var rewindPoint = getOrCreateRewindPoint();
rewindPoint.slidingWindowIndex = slidingWindowIndex;
rewindPoint.absolutePosition = _absolutePosition;
return rewindPoint;
}
function rewind(rewindPoint) {
slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex);
_absolutePosition = rewindPoint.absolutePosition;
}
function releaseRewindPoint(rewindPoint) {
slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex);
rewindPointPool[rewindPointPoolCount] = rewindPoint;
rewindPointPoolCount++;
}
function fetchNextItem(allowContextualToken) {
var token = scanner.scan(allowContextualToken);
if (lastDiagnostic === undefined) {
return token;
}
_tokenDiagnostics.push(lastDiagnostic);
lastDiagnostic = undefined;
return TypeScript.Syntax.realizeToken(token, text);
}
function peekToken(n) {
return slidingWindow.peekItemN(n);
}
function consumeToken(token) {
_absolutePosition += token.fullWidth();
slidingWindow.moveToNextItem();
}
function currentToken() {
return slidingWindow.currentItem(false);
}
function removeDiagnosticsOnOrAfterPosition(position) {
var tokenDiagnosticsLength = _tokenDiagnostics.length;
while (tokenDiagnosticsLength > 0) {
var diagnostic = _tokenDiagnostics[tokenDiagnosticsLength - 1];
if (diagnostic.start() >= position) {
tokenDiagnosticsLength--;
_tokenDiagnostics.pop();
}
else {
break;
}
}
}
function resetToPosition(absolutePosition) {
TypeScript.Debug.assert(absolutePosition <= text.length(), "Trying to set the position outside the bounds of the text!");
var resetBackward = absolutePosition <= _absolutePosition;
_absolutePosition = absolutePosition;
if (resetBackward) {
removeDiagnosticsOnOrAfterPosition(absolutePosition);
}
slidingWindow.disgardAllItemsFromCurrentIndexOnwards();
scanner.setIndex(absolutePosition);
}
function currentContextualToken() {
resetToPosition(_absolutePosition);
var token = slidingWindow.currentItem(true);
return token;
}
return {
text: text,
fileName: fileName,
languageVersion: languageVersion,
currentNode: currentNode,
currentToken: currentToken,
currentContextualToken: currentContextualToken,
peekToken: peekToken,
consumeNode: consumeNode,
consumeToken: consumeToken,
getRewindPoint: getRewindPoint,
rewind: rewind,
releaseRewindPoint: releaseRewindPoint,
tokenDiagnostics: tokenDiagnostics,
release: release,
absolutePosition: absolutePosition,
resetToPosition: resetToPosition
};
}
Scanner.createParserSource = createParserSource;
var fixedWidthArray = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 5, 8, 8, 7, 6, 2, 4, 5, 7, 3, 8, 2, 2, 10, 3, 4, 6, 6, 4, 5, 4, 3, 6, 3, 4, 5, 4, 5, 5, 4, 6, 7, 6, 5, 10, 9, 3, 7, 7, 9, 6, 6, 5, 3, 7, 11, 7, 3, 6, 7, 6, 3, 6, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 2, 2, 2, 1, 2];
function fixedWidthTokenLength(kind) {
return fixedWidthArray[kind];
}
})(Scanner = TypeScript.Scanner || (TypeScript.Scanner = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var ScannerUtilities;
(function (ScannerUtilities) {
function identifierKind(str, start, length) {
switch (length) {
case 2:
switch (str.charCodeAt(start)) {
case 100 /* d */: return (str.charCodeAt(start + 1) === 111 /* o */) ? 24 /* DoKeyword */ : 9 /* IdentifierName */;
case 105 /* i */:
switch (str.charCodeAt(start + 1)) {
case 102 /* f */: return 30 /* IfKeyword */;
case 110 /* n */: return 31 /* InKeyword */;
default: return 9 /* IdentifierName */;
}
default: return 9 /* IdentifierName */;
}
case 3:
switch (str.charCodeAt(start)) {
case 97 /* a */: return (str.charCodeAt(start + 1) === 110 /* n */ && str.charCodeAt(start + 2) === 121 /* y */) ? 62 /* AnyKeyword */ : 9 /* IdentifierName */;
case 102 /* f */: return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 114 /* r */) ? 28 /* ForKeyword */ : 9 /* IdentifierName */;
case 103 /* g */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 66 /* GetKeyword */ : 9 /* IdentifierName */;
case 108 /* l */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 55 /* LetKeyword */ : 9 /* IdentifierName */;
case 110 /* n */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 119 /* w */) ? 33 /* NewKeyword */ : 9 /* IdentifierName */;
case 115 /* s */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 70 /* SetKeyword */ : 9 /* IdentifierName */;
case 116 /* t */: return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 121 /* y */) ? 40 /* TryKeyword */ : 9 /* IdentifierName */;
case 118 /* v */: return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 114 /* r */) ? 42 /* VarKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 4:
switch (str.charCodeAt(start)) {
case 99 /* c */: return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 101 /* e */) ? 18 /* CaseKeyword */ : 9 /* IdentifierName */;
case 101 /* e */:
switch (str.charCodeAt(start + 1)) {
case 108 /* l */: return (str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 101 /* e */) ? 25 /* ElseKeyword */ : 9 /* IdentifierName */;
case 110 /* n */: return (str.charCodeAt(start + 2) === 117 /* u */ && str.charCodeAt(start + 3) === 109 /* m */) ? 48 /* EnumKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 110 /* n */: return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 108 /* l */) ? 34 /* NullKeyword */ : 9 /* IdentifierName */;
case 116 /* t */:
switch (str.charCodeAt(start + 1)) {
case 104 /* h */: return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 115 /* s */) ? 37 /* ThisKeyword */ : 9 /* IdentifierName */;
case 114 /* r */: return (str.charCodeAt(start + 2) === 117 /* u */ && str.charCodeAt(start + 3) === 101 /* e */) ? 39 /* TrueKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 118 /* v */: return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 100 /* d */) ? 43 /* VoidKeyword */ : 9 /* IdentifierName */;
case 119 /* w */: return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 104 /* h */) ? 45 /* WithKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 5:
switch (str.charCodeAt(start)) {
case 98 /* b */: return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 101 /* e */ && str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 107 /* k */) ? 17 /* BreakKeyword */ : 9 /* IdentifierName */;
case 99 /* c */:
switch (str.charCodeAt(start + 1)) {
case 97 /* a */: return (str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 99 /* c */ && str.charCodeAt(start + 4) === 104 /* h */) ? 19 /* CatchKeyword */ : 9 /* IdentifierName */;
case 108 /* l */: return (str.charCodeAt(start + 2) === 97 /* a */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 115 /* s */) ? 46 /* ClassKeyword */ : 9 /* IdentifierName */;
case 111 /* o */: return (str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 116 /* t */) ? 47 /* ConstKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 102 /* f */: return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 101 /* e */) ? 26 /* FalseKeyword */ : 9 /* IdentifierName */;
case 115 /* s */: return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 114 /* r */) ? 52 /* SuperKeyword */ : 9 /* IdentifierName */;
case 116 /* t */: return (str.charCodeAt(start + 1) === 104 /* h */ && str.charCodeAt(start + 2) === 114 /* r */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 119 /* w */) ? 38 /* ThrowKeyword */ : 9 /* IdentifierName */;
case 119 /* w */: return (str.charCodeAt(start + 1) === 104 /* h */ && str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */) ? 44 /* WhileKeyword */ : 9 /* IdentifierName */;
case 121 /* y */: return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 101 /* e */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 100 /* d */) ? 61 /* YieldKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 6:
switch (str.charCodeAt(start)) {
case 100 /* d */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 101 /* e */) ? 23 /* DeleteKeyword */ : 9 /* IdentifierName */;
case 101 /* e */: return (str.charCodeAt(start + 1) === 120 /* x */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 116 /* t */) ? 49 /* ExportKeyword */ : 9 /* IdentifierName */;
case 105 /* i */: return (str.charCodeAt(start + 1) === 109 /* m */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 116 /* t */) ? 51 /* ImportKeyword */ : 9 /* IdentifierName */;
case 109 /* m */: return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 100 /* d */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 108 /* l */ && str.charCodeAt(start + 5) === 101 /* e */) ? 67 /* ModuleKeyword */ : 9 /* IdentifierName */;
case 110 /* n */: return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 109 /* m */ && str.charCodeAt(start + 3) === 98 /* b */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 114 /* r */) ? 69 /* NumberKeyword */ : 9 /* IdentifierName */;
case 112 /* p */: return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 98 /* b */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 99 /* c */) ? 59 /* PublicKeyword */ : 9 /* IdentifierName */;
case 114 /* r */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 110 /* n */) ? 35 /* ReturnKeyword */ : 9 /* IdentifierName */;
case 115 /* s */:
switch (str.charCodeAt(start + 1)) {
case 116 /* t */:
switch (str.charCodeAt(start + 2)) {
case 97 /* a */: return (str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 99 /* c */) ? 60 /* StaticKeyword */ : 9 /* IdentifierName */;
case 114 /* r */: return (str.charCodeAt(start + 3) === 105 /* i */ && str.charCodeAt(start + 4) === 110 /* n */ && str.charCodeAt(start + 5) === 103 /* g */) ? 71 /* StringKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 119 /* w */: return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 99 /* c */ && str.charCodeAt(start + 5) === 104 /* h */) ? 36 /* SwitchKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 116 /* t */: return (str.charCodeAt(start + 1) === 121 /* y */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 111 /* o */ && str.charCodeAt(start + 5) === 102 /* f */) ? 41 /* TypeOfKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 7:
switch (str.charCodeAt(start)) {
case 98 /* b */: return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 111 /* o */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 97 /* a */ && str.charCodeAt(start + 6) === 110 /* n */) ? 63 /* BooleanKeyword */ : 9 /* IdentifierName */;
case 100 /* d */:
switch (str.charCodeAt(start + 1)) {
case 101 /* e */:
switch (str.charCodeAt(start + 2)) {
case 99 /* c */: return (str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 101 /* e */) ? 65 /* DeclareKeyword */ : 9 /* IdentifierName */;
case 102 /* f */: return (str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 117 /* u */ && str.charCodeAt(start + 5) === 108 /* l */ && str.charCodeAt(start + 6) === 116 /* t */) ? 22 /* DefaultKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
default: return 9 /* IdentifierName */;
}
case 101 /* e */: return (str.charCodeAt(start + 1) === 120 /* x */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 110 /* n */ && str.charCodeAt(start + 5) === 100 /* d */ && str.charCodeAt(start + 6) === 115 /* s */) ? 50 /* ExtendsKeyword */ : 9 /* IdentifierName */;
case 102 /* f */: return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 108 /* l */ && str.charCodeAt(start + 5) === 108 /* l */ && str.charCodeAt(start + 6) === 121 /* y */) ? 27 /* FinallyKeyword */ : 9 /* IdentifierName */;
case 112 /* p */:
switch (str.charCodeAt(start + 1)) {
case 97 /* a */: return (str.charCodeAt(start + 2) === 99 /* c */ && str.charCodeAt(start + 3) === 107 /* k */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 103 /* g */ && str.charCodeAt(start + 6) === 101 /* e */) ? 56 /* PackageKeyword */ : 9 /* IdentifierName */;
case 114 /* r */: return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 118 /* v */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 116 /* t */ && str.charCodeAt(start + 6) === 101 /* e */) ? 57 /* PrivateKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 114 /* r */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 113 /* q */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 101 /* e */) ? 68 /* RequireKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 8:
switch (str.charCodeAt(start)) {
case 99 /* c */: return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 110 /* n */ && str.charCodeAt(start + 6) === 117 /* u */ && str.charCodeAt(start + 7) === 101 /* e */) ? 20 /* ContinueKeyword */ : 9 /* IdentifierName */;
case 100 /* d */: return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 98 /* b */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 103 /* g */ && str.charCodeAt(start + 5) === 103 /* g */ && str.charCodeAt(start + 6) === 101 /* e */ && str.charCodeAt(start + 7) === 114 /* r */) ? 21 /* DebuggerKeyword */ : 9 /* IdentifierName */;
case 102 /* f */: return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 99 /* c */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 105 /* i */ && str.charCodeAt(start + 6) === 111 /* o */ && str.charCodeAt(start + 7) === 110 /* n */) ? 29 /* FunctionKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 9:
switch (str.charCodeAt(start)) {
case 105 /* i */: return (str.charCodeAt(start + 1) === 110 /* n */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 102 /* f */ && str.charCodeAt(start + 6) === 97 /* a */ && str.charCodeAt(start + 7) === 99 /* c */ && str.charCodeAt(start + 8) === 101 /* e */) ? 54 /* InterfaceKeyword */ : 9 /* IdentifierName */;
case 112 /* p */: return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 111 /* o */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 99 /* c */ && str.charCodeAt(start + 6) === 116 /* t */ && str.charCodeAt(start + 7) === 101 /* e */ && str.charCodeAt(start + 8) === 100 /* d */) ? 58 /* ProtectedKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
case 10:
switch (str.charCodeAt(start)) {
case 105 /* i */:
switch (str.charCodeAt(start + 1)) {
case 109 /* m */: return (str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 109 /* m */ && str.charCodeAt(start + 6) === 101 /* e */ && str.charCodeAt(start + 7) === 110 /* n */ && str.charCodeAt(start + 8) === 116 /* t */ && str.charCodeAt(start + 9) === 115 /* s */) ? 53 /* ImplementsKeyword */ : 9 /* IdentifierName */;
case 110 /* n */: return (str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 110 /* n */ && str.charCodeAt(start + 6) === 99 /* c */ && str.charCodeAt(start + 7) === 101 /* e */ && str.charCodeAt(start + 8) === 111 /* o */ && str.charCodeAt(start + 9) === 102 /* f */) ? 32 /* InstanceOfKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
default: return 9 /* IdentifierName */;
}
case 11: return (str.charCodeAt(start) === 99 /* c */ && str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 117 /* u */ && str.charCodeAt(start + 7) === 99 /* c */ && str.charCodeAt(start + 8) === 116 /* t */ && str.charCodeAt(start + 9) === 111 /* o */ && str.charCodeAt(start + 10) === 114 /* r */) ? 64 /* ConstructorKeyword */ : 9 /* IdentifierName */;
default: return 9 /* IdentifierName */;
}
}
ScannerUtilities.identifierKind = identifierKind;
})(ScannerUtilities = TypeScript.ScannerUtilities || (TypeScript.ScannerUtilities = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SlidingWindow = (function () {
function SlidingWindow(fetchNextItem, window, defaultValue, sourceLength) {
if (sourceLength === void 0) { sourceLength = -1; }
this.fetchNextItem = fetchNextItem;
this.window = window;
this.defaultValue = defaultValue;
this.sourceLength = sourceLength;
this.windowCount = 0;
this.windowAbsoluteStartIndex = 0;
this.currentRelativeItemIndex = 0;
this._pinCount = 0;
this.firstPinnedAbsoluteIndex = -1;
}
SlidingWindow.prototype.addMoreItemsToWindow = function (argument) {
var sourceLength = this.sourceLength;
if (sourceLength >= 0 && this.absoluteIndex() >= sourceLength) {
return false;
}
if (this.windowCount >= this.window.length) {
this.tryShiftOrGrowWindow();
}
var item = this.fetchNextItem(argument);
this.window[this.windowCount] = item;
this.windowCount++;
return true;
};
SlidingWindow.prototype.tryShiftOrGrowWindow = function () {
var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1);
var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex;
if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) {
var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex;
var shiftCount = this.windowCount - shiftStartIndex;
if (shiftCount > 0) {
TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount);
}
this.windowAbsoluteStartIndex += shiftStartIndex;
this.windowCount -= shiftStartIndex;
this.currentRelativeItemIndex -= shiftStartIndex;
}
else {
TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue);
}
};
SlidingWindow.prototype.absoluteIndex = function () {
return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex;
};
SlidingWindow.prototype.isAtEndOfSource = function () {
return this.absoluteIndex() >= this.sourceLength;
};
SlidingWindow.prototype.getAndPinAbsoluteIndex = function () {
var absoluteIndex = this.absoluteIndex();
var pinCount = this._pinCount++;
if (pinCount === 0) {
this.firstPinnedAbsoluteIndex = absoluteIndex;
}
return absoluteIndex;
};
SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) {
this._pinCount--;
if (this._pinCount === 0) {
this.firstPinnedAbsoluteIndex = -1;
}
};
SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) {
var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex;
this.currentRelativeItemIndex = relativeIndex;
};
SlidingWindow.prototype.currentItem = function (argument) {
if (this.currentRelativeItemIndex >= this.windowCount) {
if (!this.addMoreItemsToWindow(argument)) {
return this.defaultValue;
}
}
return this.window[this.currentRelativeItemIndex];
};
SlidingWindow.prototype.peekItemN = function (n) {
while (this.currentRelativeItemIndex + n >= this.windowCount) {
if (!this.addMoreItemsToWindow(undefined)) {
return this.defaultValue;
}
}
return this.window[this.currentRelativeItemIndex + n];
};
SlidingWindow.prototype.moveToNextItem = function () {
this.currentRelativeItemIndex++;
};
SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () {
this.windowCount = this.currentRelativeItemIndex;
};
return SlidingWindow;
})();
TypeScript.SlidingWindow = SlidingWindow;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Syntax;
(function (Syntax) {
Syntax._nextSyntaxID = 1;
function nodeHasSkippedOrMissingTokens(node) {
for (var i = 0; i < TypeScript.childCount(node); i++) {
var child = TypeScript.childAt(node, i);
if (TypeScript.isToken(child)) {
var token = child;
if (token.hasLeadingSkippedToken() || (TypeScript.fullWidth(token) === 0 && token.kind !== 8 /* EndOfFileToken */)) {
return true;
}
}
}
return false;
}
Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens;
function isUnterminatedStringLiteral(token) {
if (token && token.kind === 12 /* StringLiteral */) {
var text = token.text();
return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0);
}
return false;
}
Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral;
function isUnterminatedMultilineCommentTrivia(trivia) {
if (trivia && trivia.kind === 4 /* MultiLineCommentTrivia */) {
var text = trivia.fullText();
return text.length < 4 || text.substring(text.length - 2) !== "*/";
}
return false;
}
Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia;
function isEntirelyInsideCommentTrivia(trivia, fullStart, position) {
if (trivia && trivia.isComment() && position > fullStart) {
var end = fullStart + trivia.fullWidth();
if (position < end) {
return true;
}
else if (position === end) {
return trivia.kind === 5 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia);
}
}
return false;
}
Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia;
function getAncestorOfKind(positionedToken, kind) {
while (positionedToken && positionedToken.parent) {
if (positionedToken.parent.kind === kind) {
return positionedToken.parent;
}
positionedToken = positionedToken.parent;
}
return undefined;
}
Syntax.getAncestorOfKind = getAncestorOfKind;
function hasAncestorOfKind(positionedToken, kind) {
return !!getAncestorOfKind(positionedToken, kind);
}
Syntax.hasAncestorOfKind = hasAncestorOfKind;
function isIntegerLiteral(expression) {
if (expression) {
switch (expression.kind) {
case 169 /* PrefixUnaryExpression */:
var prefixExpr = expression;
if (prefixExpr.operatorToken.kind == 91 /* PlusToken */ || prefixExpr.operatorToken.kind === 92 /* MinusToken */) {
expression = prefixExpr.operand;
return TypeScript.isToken(expression) && TypeScript.IntegerUtilities.isInteger(expression.text());
}
return false;
case 11 /* NumericLiteral */:
var text = expression.text();
return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text);
}
}
return false;
}
Syntax.isIntegerLiteral = isIntegerLiteral;
function containingNode(element) {
var current = element.parent;
while (current && !TypeScript.isNode(current)) {
current = current.parent;
}
return current;
}
Syntax.containingNode = containingNode;
function findTokenOnLeft(sourceUnit, position) {
var positionedToken = TypeScript.findToken(sourceUnit, position);
var _start = TypeScript.start(positionedToken);
if (position > _start) {
return positionedToken;
}
if (positionedToken.fullStart() === 0) {
return undefined;
}
return TypeScript.previousToken(positionedToken);
}
Syntax.findTokenOnLeft = findTokenOnLeft;
function findCompleteTokenOnLeft(sourceUnit, position) {
var positionedToken = TypeScript.findToken(sourceUnit, position);
if (TypeScript.width(positionedToken) > 0 && position >= TypeScript.fullEnd(positionedToken)) {
return positionedToken;
}
return TypeScript.previousToken(positionedToken);
}
Syntax.findCompleteTokenOnLeft = findCompleteTokenOnLeft;
})(Syntax = TypeScript.Syntax || (TypeScript.Syntax = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function syntaxTree(element) {
if (element) {
while (element) {
if (element.kind === 122 /* SourceUnit */) {
return element.syntaxTree;
}
element = element.parent;
}
}
return undefined;
}
TypeScript.syntaxTree = syntaxTree;
function parsedInStrictMode(node) {
var info = node.__data;
if (info === undefined) {
return false;
}
return (info & 4 /* NodeParsedInStrictModeMask */) !== 0;
}
TypeScript.parsedInStrictMode = parsedInStrictMode;
function parsedInDisallowInMode(node) {
var info = node.__data;
if (info === undefined) {
return false;
}
return (info & 8 /* NodeParsedInDisallowInMask */) !== 0;
}
TypeScript.parsedInDisallowInMode = parsedInDisallowInMode;
function previousToken(token) {
var start = token.fullStart();
if (start === 0) {
return undefined;
}
return findToken(syntaxTree(token).sourceUnit(), start - 1);
}
TypeScript.previousToken = previousToken;
function findToken(sourceUnit, position) {
if (position < 0) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
var token = findTokenInNodeOrToken(sourceUnit, 0, position);
if (token) {
TypeScript.Debug.assert(token.fullWidth() > 0);
return token;
}
if (position === fullWidth(sourceUnit)) {
return sourceUnit.endOfFileToken;
}
if (position > fullWidth(sourceUnit)) {
throw TypeScript.Errors.argumentOutOfRange("position");
}
throw TypeScript.Errors.invalidOperation();
}
TypeScript.findToken = findToken;
function findTokenWorker(element, elementPosition, position) {
if (isList(element)) {
return findTokenInList(element, elementPosition, position);
}
else {
return findTokenInNodeOrToken(element, elementPosition, position);
}
}
function findTokenInList(list, elementPosition, position) {
for (var i = 0, n = list.length; i < n; i++) {
var child = list[i];
var childFullWidth = fullWidth(child);
var elementEndPosition = elementPosition + childFullWidth;
if (position < elementEndPosition) {
return findTokenWorker(child, elementPosition, position);
}
elementPosition = elementEndPosition;
}
return undefined;
}
function findTokenInNodeOrToken(nodeOrToken, elementPosition, position) {
if (isToken(nodeOrToken)) {
return nodeOrToken;
}
for (var i = 0, n = TypeScript.childCount(nodeOrToken); i < n; i++) {
var child = nodeOrToken.childAt(i);
if (child) {
var childFullWidth = fullWidth(child);
var elementEndPosition = elementPosition + childFullWidth;
if (position < elementEndPosition) {
return findTokenWorker(child, elementPosition, position);
}
elementPosition = elementEndPosition;
}
}
return undefined;
}
function tryGetEndOfFileAt(element, position) {
if (element.kind === 122 /* SourceUnit */ && position === fullWidth(element)) {
var sourceUnit = element;
return sourceUnit.endOfFileToken;
}
return undefined;
}
function nextToken(token, text) {
if (token.kind === 8 /* EndOfFileToken */) {
return undefined;
}
return findToken(syntaxTree(token).sourceUnit(), fullEnd(token));
}
TypeScript.nextToken = nextToken;
function isNode(element) {
if (element) {
var kind = element.kind;
return kind >= TypeScript.SyntaxKind.FirstNode && kind <= TypeScript.SyntaxKind.LastNode;
}
return false;
}
TypeScript.isNode = isNode;
function isTokenKind(kind) {
return kind >= TypeScript.SyntaxKind.FirstToken && kind <= TypeScript.SyntaxKind.LastToken;
}
function isToken(element) {
if (element) {
return isTokenKind(element.kind);
}
return false;
}
TypeScript.isToken = isToken;
function isList(element) {
return element instanceof Array;
}
TypeScript.isList = isList;
function syntaxID(element) {
var obj = element;
if (obj._syntaxID === undefined) {
obj._syntaxID = TypeScript.Syntax._nextSyntaxID++;
}
return obj._syntaxID;
}
TypeScript.syntaxID = syntaxID;
function collectTextElements(element, elements, text) {
if (element) {
if (isToken(element)) {
elements.push(element.fullText(text));
}
else {
for (var i = 0, n = TypeScript.childCount(element); i < n; i++) {
collectTextElements(TypeScript.childAt(element, i), elements, text);
}
}
}
}
function fullText(element, text) {
if (isToken(element)) {
return element.fullText(text);
}
var elements = [];
collectTextElements(element, elements, text);
return elements.join("");
}
TypeScript.fullText = fullText;
function leadingTriviaWidth(element, text) {
var token = firstToken(element);
return token ? token.leadingTriviaWidth(text) : 0;
}
TypeScript.leadingTriviaWidth = leadingTriviaWidth;
function firstToken(element) {
if (element) {
var kind = element.kind;
if (isTokenKind(kind)) {
return element.fullWidth() > 0 || kind === 8 /* EndOfFileToken */ ? element : undefined;
}
for (var i = 0, n = TypeScript.childCount(element); i < n; i++) {
var token = firstToken(TypeScript.childAt(element, i));
if (token) {
return token;
}
}
}
return undefined;
}
TypeScript.firstToken = firstToken;
function lastToken(element) {
if (isToken(element)) {
return fullWidth(element) > 0 || element.kind === 8 /* EndOfFileToken */ ? element : undefined;
}
if (element.kind === 122 /* SourceUnit */) {
return element.endOfFileToken;
}
for (var i = TypeScript.childCount(element) - 1; i >= 0; i--) {
var child = TypeScript.childAt(element, i);
if (child) {
var token = lastToken(child);
if (token) {
return token;
}
}
}
return undefined;
}
TypeScript.lastToken = lastToken;
function fullStart(element) {
var token = isToken(element) ? element : firstToken(element);
return token ? token.fullStart() : -1;
}
TypeScript.fullStart = fullStart;
function fullWidth(element) {
if (isToken(element)) {
return element.fullWidth();
}
var info = data(element);
return info >>> 4 /* NodeFullWidthShift */;
}
TypeScript.fullWidth = fullWidth;
function isIncrementallyUnusable(element) {
if (isToken(element)) {
return element.isIncrementallyUnusable();
}
return (data(element) & 2 /* NodeIncrementallyUnusableMask */) !== 0;
}
TypeScript.isIncrementallyUnusable = isIncrementallyUnusable;
function data(element) {
var dataElement = element;
var info = dataElement.__data;
if (info === undefined) {
info = 0;
}
if ((info & 1 /* NodeDataComputed */) === 0) {
info |= computeData(element);
dataElement.__data = info;
}
return info;
}
function combineData(fullWidth, isIncrementallyUnusable) {
return (fullWidth << 4 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */;
}
function listComputeData(list) {
var fullWidth = 0;
var isIncrementallyUnusable = false;
for (var i = 0, n = list.length; i < n; i++) {
var child = list[i];
fullWidth += TypeScript.fullWidth(child);
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
}
return combineData(fullWidth, isIncrementallyUnusable);
}
function computeData(element) {
if (isList(element)) {
return listComputeData(element);
}
else {
return nodeOrTokenComputeData(element);
}
}
function nodeOrTokenComputeData(nodeOrToken) {
var fullWidth = 0;
var slotCount = nodeOrToken.childCount;
var isIncrementallyUnusable = slotCount === 0;
for (var i = 0, n = slotCount; i < n; i++) {
var child = nodeOrToken.childAt(i);
if (child) {
fullWidth += TypeScript.fullWidth(child);
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
}
}
return combineData(fullWidth, isIncrementallyUnusable);
}
function start(element, text) {
var token = isToken(element) ? element : firstToken(element);
return token ? token.fullStart() + token.leadingTriviaWidth(text) : -1;
}
TypeScript.start = start;
function width(element, text) {
if (isToken(element)) {
return element.text().length;
}
return fullWidth(element) - leadingTriviaWidth(element, text);
}
TypeScript.width = width;
function fullEnd(element) {
return fullStart(element) + fullWidth(element);
}
TypeScript.fullEnd = fullEnd;
function existsNewLineBetweenTokens(token1, token2, text) {
if (token1 === token2) {
return false;
}
if (!token1 || !token2) {
return true;
}
var lineMap = text.lineMap();
return lineMap.getLineNumberFromPosition(fullEnd(token1)) !== lineMap.getLineNumberFromPosition(start(token2, text));
}
TypeScript.existsNewLineBetweenTokens = existsNewLineBetweenTokens;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxFacts;
(function (SyntaxFacts) {
function isDirectivePrologueElement(node) {
return node.kind === 154 /* ExpressionStatement */ && node.expression.kind === 12 /* StringLiteral */;
}
SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement;
function isUseStrictDirective(node) {
var expressionStatement = node;
var stringLiteral = expressionStatement.expression;
var text = stringLiteral.text();
return text === '"use strict"' || text === "'use strict'";
}
SyntaxFacts.isUseStrictDirective = isUseStrictDirective;
function isIdentifierNameOrAnyKeyword(token) {
var tokenKind = token.kind;
return tokenKind === 9 /* IdentifierName */ || SyntaxFacts.isAnyKeyword(tokenKind);
}
SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword;
function isAccessibilityModifier(kind) {
switch (kind) {
case 59 /* PublicKeyword */:
case 57 /* PrivateKeyword */:
case 58 /* ProtectedKeyword */:
return true;
}
return false;
}
SyntaxFacts.isAccessibilityModifier = isAccessibilityModifier;
})(SyntaxFacts = TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function separatorCount(list) {
return list === undefined ? 0 : list.length >> 1;
}
TypeScript.separatorCount = separatorCount;
function nonSeparatorCount(list) {
return list === undefined ? 0 : (list.length + 1) >> 1;
}
TypeScript.nonSeparatorCount = nonSeparatorCount;
function separatorAt(list, index) {
return list[(index << 1) + 1];
}
TypeScript.separatorAt = separatorAt;
function nonSeparatorAt(list, index) {
return list[index << 1];
}
TypeScript.nonSeparatorAt = nonSeparatorAt;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Syntax;
(function (Syntax) {
function addArrayPrototypeValue(name, val) {
if (Object.defineProperty && Array.prototype[name] === undefined) {
Object.defineProperty(Array.prototype, name, { value: val, writable: false });
}
else {
Array.prototype[name] = val;
}
}
addArrayPrototypeValue("kind", 1 /* List */);
function list(nodes) {
if (nodes !== undefined) {
for (var i = 0, n = nodes.length; i < n; i++) {
nodes[i].parent = nodes;
}
}
return nodes;
}
Syntax.list = list;
function separatedList(nodesAndTokens) {
if (nodesAndTokens !== undefined) {
for (var i = 0, n = nodesAndTokens.length; i < n; i++) {
nodesAndTokens[i].parent = nodesAndTokens;
}
}
return nodesAndTokens;
}
Syntax.separatedList = separatedList;
})(Syntax = TypeScript.Syntax || (TypeScript.Syntax = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function tokenValue(token) {
if (token.fullWidth() === 0) {
return undefined;
}
var kind = token.kind;
var text = token.text();
if (kind === 9 /* IdentifierName */) {
return massageEscapes(text);
}
switch (kind) {
case 39 /* TrueKeyword */:
return true;
case 26 /* FalseKeyword */:
return false;
case 34 /* NullKeyword */:
return undefined;
}
if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) {
return TypeScript.SyntaxFacts.getText(kind);
}
if (kind === 11 /* NumericLiteral */) {
return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text);
}
else if (kind === 12 /* StringLiteral */) {
return (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) ? massageEscapes(text.substr(1, text.length - "''".length)) : massageEscapes(text.substr(1));
}
else if (kind === 13 /* NoSubstitutionTemplateToken */ || kind === 16 /* TemplateEndToken */) {
return (text.length > 1 && text.charCodeAt(text.length - 1) === 96 /* backtick */) ? massageTemplate(text.substr(1, text.length - "``".length)) : massageTemplate(text.substr(1));
}
else if (kind === 14 /* TemplateStartToken */ || kind === 15 /* TemplateMiddleToken */) {
return massageTemplate(text.substr(1, text.length - "`${".length));
}
else if (kind === 10 /* RegularExpressionLiteral */) {
return regularExpressionValue(text);
}
else if (kind === 8 /* EndOfFileToken */ || kind === 7 /* ErrorToken */) {
return undefined;
}
else {
throw TypeScript.Errors.invalidOperation();
}
}
TypeScript.tokenValue = tokenValue;
function tokenValueText(token) {
var value = tokenValue(token);
return value === undefined ? "" : massageDisallowedIdentifiers(value.toString());
}
TypeScript.tokenValueText = tokenValueText;
function massageTemplate(text) {
text = text.replace("\r\n", "\n").replace("\r", "\n");
return massageEscapes(text);
}
function massageEscapes(text) {
return text.indexOf("\\") >= 0 ? convertEscapes(text) : text;
}
TypeScript.massageEscapes = massageEscapes;
function regularExpressionValue(text) {
try {
var lastSlash = text.lastIndexOf("/");
var body = text.substring(1, lastSlash);
var flags = text.substring(lastSlash + 1);
return new RegExp(body, flags);
}
catch (e) {
return undefined;
}
}
function massageDisallowedIdentifiers(text) {
if (text.charCodeAt(0) === 95 /* _ */ && text.charCodeAt(1) === 95 /* _ */) {
return "_" + text;
}
return text;
}
var characterArray = [];
function convertEscapes(text) {
characterArray.length = 0;
var result = "";
for (var i = 0, n = text.length; i < n; i++) {
var ch = text.charCodeAt(i);
if (ch === 92 /* backslash */) {
i++;
if (i < n) {
ch = text.charCodeAt(i);
switch (ch) {
case 48 /* _0 */:
characterArray.push(0 /* nullCharacter */);
continue;
case 98 /* b */:
characterArray.push(8 /* backspace */);
continue;
case 102 /* f */:
characterArray.push(12 /* formFeed */);
continue;
case 110 /* n */:
characterArray.push(10 /* lineFeed */);
continue;
case 114 /* r */:
characterArray.push(13 /* carriageReturn */);
continue;
case 116 /* t */:
characterArray.push(9 /* tab */);
continue;
case 118 /* v */:
characterArray.push(11 /* verticalTab */);
continue;
case 120 /* x */:
characterArray.push(hexValue(text, i + 1, 2));
i += 2;
continue;
case 117 /* u */:
characterArray.push(hexValue(text, i + 1, 4));
i += 4;
continue;
case 13 /* carriageReturn */:
var nextIndex = i + 1;
if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) {
i++;
}
continue;
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
continue;
default:
}
}
}
characterArray.push(ch);
if (i && !(i % 1024)) {
result = result.concat(String.fromCharCode.apply(undefined, characterArray));
characterArray.length = 0;
}
}
if (characterArray.length) {
result = result.concat(String.fromCharCode.apply(undefined, characterArray));
}
return result;
}
function hexValue(text, start, length) {
var intChar = 0;
for (var i = 0; i < length; i++) {
var ch2 = text.charCodeAt(start + i);
if (!TypeScript.CharacterInfo.isHexDigit(ch2)) {
break;
}
intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2);
}
return intChar;
}
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Syntax;
(function (Syntax) {
function realizeToken(token, text) {
return new RealizedToken(token.fullStart(), token.kind, token.isKeywordConvertedToIdentifier(), token.leadingTrivia(text), token.text());
}
Syntax.realizeToken = realizeToken;
function convertKeywordToIdentifier(token) {
return new ConvertedKeywordToken(token);
}
Syntax.convertKeywordToIdentifier = convertKeywordToIdentifier;
function withLeadingTrivia(token, leadingTrivia, text) {
return new RealizedToken(token.fullStart(), token.kind, token.isKeywordConvertedToIdentifier(), leadingTrivia, token.text());
}
Syntax.withLeadingTrivia = withLeadingTrivia;
function emptyToken(kind) {
return new EmptyToken(kind);
}
Syntax.emptyToken = emptyToken;
var EmptyToken = (function () {
function EmptyToken(kind) {
this.kind = kind;
}
EmptyToken.prototype.setFullStart = function (fullStart) {
};
EmptyToken.prototype.childAt = function (index) {
throw TypeScript.Errors.invalidOperation();
};
EmptyToken.prototype.clone = function () {
return new EmptyToken(this.kind);
};
EmptyToken.prototype.isIncrementallyUnusable = function () {
return true;
};
EmptyToken.prototype.isKeywordConvertedToIdentifier = function () {
return false;
};
EmptyToken.prototype.fullWidth = function () {
return 0;
};
EmptyToken.prototype.position = function () {
var previousElement = this.previousNonZeroWidthElement();
return !previousElement ? 0 : TypeScript.fullStart(previousElement) + TypeScript.fullWidth(previousElement);
};
EmptyToken.prototype.previousNonZeroWidthElement = function () {
var current = this;
while (true) {
var parent = current.parent;
if (parent === undefined) {
TypeScript.Debug.assert(current.kind === 122 /* SourceUnit */, "We had a node without a parent that was not the root node!");
return undefined;
}
for (var i = 0, n = TypeScript.childCount(parent); i < n; i++) {
if (TypeScript.childAt(parent, i) === current) {
break;
}
}
TypeScript.Debug.assert(i !== n, "Could not find current element in parent's child list!");
for (var j = i - 1; j >= 0; j--) {
var sibling = TypeScript.childAt(parent, j);
if (sibling && TypeScript.fullWidth(sibling) > 0) {
return sibling;
}
}
current = current.parent;
}
};
EmptyToken.prototype.fullStart = function () {
return this.position();
};
EmptyToken.prototype.text = function () {
return "";
};
EmptyToken.prototype.fullText = function () {
return "";
};
EmptyToken.prototype.hasLeadingTrivia = function () {
return false;
};
EmptyToken.prototype.hasLeadingNewLine = function () {
return false;
};
EmptyToken.prototype.hasLeadingComment = function () {
return false;
};
EmptyToken.prototype.hasLeadingSkippedToken = function () {
return false;
};
EmptyToken.prototype.leadingTriviaWidth = function () {
return 0;
};
EmptyToken.prototype.leadingTrivia = function () {
return Syntax.emptyTriviaList;
};
return EmptyToken;
})();
EmptyToken.prototype.childCount = 0;
var RealizedToken = (function () {
function RealizedToken(fullStart, kind, isKeywordConvertedToIdentifier, leadingTrivia, text) {
this.kind = kind;
this._fullStart = fullStart;
this._isKeywordConvertedToIdentifier = isKeywordConvertedToIdentifier;
this._text = text;
this._leadingTrivia = leadingTrivia.clone();
if (!this._leadingTrivia.isShared()) {
this._leadingTrivia.parent = this;
}
}
RealizedToken.prototype.setFullStart = function (fullStart) {
this._fullStart = fullStart;
};
RealizedToken.prototype.childAt = function (index) {
throw TypeScript.Errors.invalidOperation();
};
RealizedToken.prototype.clone = function () {
return new RealizedToken(this._fullStart, this.kind, this._isKeywordConvertedToIdentifier, this._leadingTrivia, this._text);
};
RealizedToken.prototype.isIncrementallyUnusable = function () {
return true;
};
RealizedToken.prototype.isKeywordConvertedToIdentifier = function () {
return this._isKeywordConvertedToIdentifier;
};
RealizedToken.prototype.fullStart = function () {
return this._fullStart;
};
RealizedToken.prototype.fullWidth = function () {
return this._leadingTrivia.fullWidth() + this._text.length;
};
RealizedToken.prototype.text = function () {
return this._text;
};
RealizedToken.prototype.fullText = function () {
return this._leadingTrivia.fullText() + this.text();
};
RealizedToken.prototype.hasLeadingTrivia = function () {
return this._leadingTrivia.count() > 0;
};
RealizedToken.prototype.hasLeadingNewLine = function () {
return this._leadingTrivia.hasNewLine();
};
RealizedToken.prototype.hasLeadingComment = function () {
return this._leadingTrivia.hasComment();
};
RealizedToken.prototype.hasLeadingSkippedToken = function () {
return this._leadingTrivia.hasSkippedToken();
};
RealizedToken.prototype.leadingTrivia = function () {
return this._leadingTrivia;
};
RealizedToken.prototype.leadingTriviaWidth = function () {
return this._leadingTrivia.fullWidth();
};
return RealizedToken;
})();
RealizedToken.prototype.childCount = 0;
var ConvertedKeywordToken = (function () {
function ConvertedKeywordToken(underlyingToken) {
this.underlyingToken = underlyingToken;
}
ConvertedKeywordToken.prototype.setFullStart = function (fullStart) {
this.underlyingToken.setFullStart(fullStart);
};
ConvertedKeywordToken.prototype.childAt = function (index) {
throw TypeScript.Errors.invalidOperation();
};
ConvertedKeywordToken.prototype.fullStart = function () {
return this.underlyingToken.fullStart();
};
ConvertedKeywordToken.prototype.fullWidth = function () {
return this.underlyingToken.fullWidth();
};
ConvertedKeywordToken.prototype.text = function () {
return this.underlyingToken.text();
};
ConvertedKeywordToken.prototype.syntaxTreeText = function (text) {
var result = text || TypeScript.syntaxTree(this).text;
TypeScript.Debug.assert(result);
return result;
};
ConvertedKeywordToken.prototype.fullText = function (text) {
return this.underlyingToken.fullText(this.syntaxTreeText(text));
};
ConvertedKeywordToken.prototype.hasLeadingTrivia = function () {
return this.underlyingToken.hasLeadingTrivia();
};
ConvertedKeywordToken.prototype.hasLeadingNewLine = function () {
return this.underlyingToken.hasLeadingNewLine();
};
ConvertedKeywordToken.prototype.hasLeadingComment = function () {
return this.underlyingToken.hasLeadingComment();
};
ConvertedKeywordToken.prototype.hasLeadingSkippedToken = function () {
return this.underlyingToken.hasLeadingSkippedToken();
};
ConvertedKeywordToken.prototype.leadingTrivia = function (text) {
var result = this.underlyingToken.leadingTrivia(this.syntaxTreeText(text));
result.parent = this;
return result;
};
ConvertedKeywordToken.prototype.leadingTriviaWidth = function (text) {
return this.underlyingToken.leadingTriviaWidth(this.syntaxTreeText(text));
};
ConvertedKeywordToken.prototype.isKeywordConvertedToIdentifier = function () {
return true;
};
ConvertedKeywordToken.prototype.isIncrementallyUnusable = function () {
return this.underlyingToken.isIncrementallyUnusable();
};
ConvertedKeywordToken.prototype.clone = function () {
return new ConvertedKeywordToken(this.underlyingToken);
};
return ConvertedKeywordToken;
})();
ConvertedKeywordToken.prototype.kind = 9 /* IdentifierName */;
ConvertedKeywordToken.prototype.childCount = 0;
})(Syntax = TypeScript.Syntax || (TypeScript.Syntax = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Syntax;
(function (Syntax) {
var AbstractTrivia = (function () {
function AbstractTrivia(kind) {
this.kind = kind;
}
AbstractTrivia.prototype.clone = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.fullStart = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.fullWidth = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.fullText = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.skippedToken = function () {
throw TypeScript.Errors.abstract();
};
AbstractTrivia.prototype.isWhitespace = function () {
return this.kind === 2 /* WhitespaceTrivia */;
};
AbstractTrivia.prototype.isComment = function () {
return this.kind === 5 /* SingleLineCommentTrivia */ || this.kind === 4 /* MultiLineCommentTrivia */;
};
AbstractTrivia.prototype.isNewLine = function () {
return this.kind === 3 /* NewLineTrivia */;
};
AbstractTrivia.prototype.isSkippedToken = function () {
return this.kind === 6 /* SkippedTokenTrivia */;
};
return AbstractTrivia;
})();
var SkippedTokenTrivia = (function (_super) {
__extends(SkippedTokenTrivia, _super);
function SkippedTokenTrivia(_skippedToken, _fullText) {
_super.call(this, 6 /* SkippedTokenTrivia */);
this._skippedToken = _skippedToken;
this._fullText = _fullText;
_skippedToken.parent = this;
}
SkippedTokenTrivia.prototype.clone = function () {
return new SkippedTokenTrivia(this._skippedToken.clone(), this._fullText);
};
SkippedTokenTrivia.prototype.fullStart = function () {
return this._skippedToken.fullStart();
};
SkippedTokenTrivia.prototype.fullWidth = function () {
return this.fullText().length;
};
SkippedTokenTrivia.prototype.fullText = function () {
return this._fullText;
};
SkippedTokenTrivia.prototype.skippedToken = function () {
return this._skippedToken;
};
return SkippedTokenTrivia;
})(AbstractTrivia);
var DeferredTrivia = (function (_super) {
__extends(DeferredTrivia, _super);
function DeferredTrivia(kind, _text, _fullStart, _fullWidth) {
_super.call(this, kind);
this._text = _text;
this._fullStart = _fullStart;
this._fullWidth = _fullWidth;
}
DeferredTrivia.prototype.clone = function () {
return new DeferredTrivia(this.kind, this._text, this._fullStart, this._fullWidth);
};
DeferredTrivia.prototype.fullStart = function () {
return this._fullStart;
};
DeferredTrivia.prototype.fullWidth = function () {
return this._fullWidth;
};
DeferredTrivia.prototype.fullText = function () {
return this._text.substr(this._fullStart, this._fullWidth);
};
DeferredTrivia.prototype.skippedToken = function () {
throw TypeScript.Errors.invalidOperation();
};
return DeferredTrivia;
})(AbstractTrivia);
function deferredTrivia(kind, text, fullStart, fullWidth) {
return new DeferredTrivia(kind, text, fullStart, fullWidth);
}
Syntax.deferredTrivia = deferredTrivia;
function skippedTokenTrivia(token, text) {
TypeScript.Debug.assert(!token.hasLeadingTrivia());
TypeScript.Debug.assert(token.fullWidth() > 0);
return new SkippedTokenTrivia(token, token.fullText(text));
}
Syntax.skippedTokenTrivia = skippedTokenTrivia;
function splitMultiLineCommentTriviaIntoMultipleLines(trivia) {
var result = [];
var triviaText = trivia.fullText();
var currentIndex = 0;
for (var i = 0; i < triviaText.length; i++) {
var ch = triviaText.charCodeAt(i);
switch (ch) {
case 13 /* carriageReturn */:
if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) {
i++;
}
case 10 /* lineFeed */:
case 8233 /* paragraphSeparator */:
case 8232 /* lineSeparator */:
result.push(triviaText.substring(currentIndex, i + 1));
currentIndex = i + 1;
continue;
}
}
result.push(triviaText.substring(currentIndex));
return result;
}
Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines;
})(Syntax = TypeScript.Syntax || (TypeScript.Syntax = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Syntax;
(function (Syntax) {
var EmptyTriviaList = (function () {
function EmptyTriviaList() {
}
EmptyTriviaList.prototype.isShared = function () {
return true;
};
EmptyTriviaList.prototype.count = function () {
return 0;
};
EmptyTriviaList.prototype.syntaxTriviaAt = function (index) {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptyTriviaList.prototype.last = function () {
throw TypeScript.Errors.argumentOutOfRange("index");
};
EmptyTriviaList.prototype.fullWidth = function () {
return 0;
};
EmptyTriviaList.prototype.fullText = function () {
return "";
};
EmptyTriviaList.prototype.hasComment = function () {
return false;
};
EmptyTriviaList.prototype.hasNewLine = function () {
return false;
};
EmptyTriviaList.prototype.hasSkippedToken = function () {
return false;
};
EmptyTriviaList.prototype.toArray = function () {
return [];
};
EmptyTriviaList.prototype.clone = function () {
return this;
};
return EmptyTriviaList;
})();
;
Syntax.emptyTriviaList = new EmptyTriviaList();
function isComment(trivia) {
return trivia.kind === 4 /* MultiLineCommentTrivia */ || trivia.kind === 5 /* SingleLineCommentTrivia */;
}
var SingletonSyntaxTriviaList = (function () {
function SingletonSyntaxTriviaList(item) {
this.item = item.clone();
this.item.parent = this;
}
SingletonSyntaxTriviaList.prototype.isShared = function () {
return false;
};
SingletonSyntaxTriviaList.prototype.count = function () {
return 1;
};
SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) {
if (index !== 0) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.item;
};
SingletonSyntaxTriviaList.prototype.last = function () {
return this.item;
};
SingletonSyntaxTriviaList.prototype.fullWidth = function () {
return this.item.fullWidth();
};
SingletonSyntaxTriviaList.prototype.fullText = function () {
return this.item.fullText();
};
SingletonSyntaxTriviaList.prototype.hasComment = function () {
return isComment(this.item);
};
SingletonSyntaxTriviaList.prototype.hasNewLine = function () {
return this.item.kind === 3 /* NewLineTrivia */;
};
SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () {
return this.item.kind === 6 /* SkippedTokenTrivia */;
};
SingletonSyntaxTriviaList.prototype.toArray = function () {
return [this.item];
};
SingletonSyntaxTriviaList.prototype.clone = function () {
return new SingletonSyntaxTriviaList(this.item.clone());
};
return SingletonSyntaxTriviaList;
})();
var NormalSyntaxTriviaList = (function () {
function NormalSyntaxTriviaList(trivia) {
var _this = this;
this.trivia = trivia.map(function (t) {
var cloned = t.clone();
cloned.parent = _this;
return cloned;
});
}
NormalSyntaxTriviaList.prototype.isShared = function () {
return false;
};
NormalSyntaxTriviaList.prototype.count = function () {
return this.trivia.length;
};
NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) {
if (index < 0 || index >= this.trivia.length) {
throw TypeScript.Errors.argumentOutOfRange("index");
}
return this.trivia[index];
};
NormalSyntaxTriviaList.prototype.last = function () {
return this.trivia[this.trivia.length - 1];
};
NormalSyntaxTriviaList.prototype.fullWidth = function () {
return TypeScript.ArrayUtilities.sum(this.trivia, function (t) { return t.fullWidth(); });
};
NormalSyntaxTriviaList.prototype.fullText = function () {
var result = [];
for (var i = 0, n = this.trivia.length; i < n; i++) {
result.push(this.trivia[i].fullText());
}
return result.join("");
};
NormalSyntaxTriviaList.prototype.hasComment = function () {
for (var i = 0; i < this.trivia.length; i++) {
if (isComment(this.trivia[i])) {
return true;
}
}
return false;
};
NormalSyntaxTriviaList.prototype.hasNewLine = function () {
for (var i = 0; i < this.trivia.length; i++) {
if (this.trivia[i].kind === 3 /* NewLineTrivia */) {
return true;
}
}
return false;
};
NormalSyntaxTriviaList.prototype.hasSkippedToken = function () {
for (var i = 0; i < this.trivia.length; i++) {
if (this.trivia[i].kind === 6 /* SkippedTokenTrivia */) {
return true;
}
}
return false;
};
NormalSyntaxTriviaList.prototype.toArray = function () {
return this.trivia.slice(0);
};
NormalSyntaxTriviaList.prototype.clone = function () {
return new NormalSyntaxTriviaList(this.trivia.map(function (t) { return t.clone(); }));
};
return NormalSyntaxTriviaList;
})();
function triviaList(trivia) {
if (!trivia || trivia.length === 0) {
return Syntax.emptyTriviaList;
}
if (trivia.length === 1) {
return new SingletonSyntaxTriviaList(trivia[0]);
}
return new NormalSyntaxTriviaList(trivia);
}
Syntax.triviaList = triviaList;
})(Syntax = TypeScript.Syntax || (TypeScript.Syntax = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function childCount(element) {
if (TypeScript.isList(element)) {
return element.length;
}
return element.childCount;
}
TypeScript.childCount = childCount;
function childAt(element, index) {
if (TypeScript.isList(element)) {
return element[index];
}
return element.childAt(index);
}
TypeScript.childAt = childAt;
var SyntaxUtilities;
(function (SyntaxUtilities) {
function isAnyFunctionExpressionOrDeclaration(ast) {
switch (ast.kind) {
case 183 /* SimpleArrowFunctionExpression */:
case 182 /* ParenthesizedArrowFunctionExpression */:
case 186 /* FunctionExpression */:
case 134 /* FunctionDeclaration */:
case 140 /* MemberFunctionDeclaration */:
case 207 /* FunctionPropertyAssignment */:
case 142 /* ConstructorDeclaration */:
case 144 /* GetAccessor */:
case 145 /* SetAccessor */:
return true;
}
return false;
}
SyntaxUtilities.isAnyFunctionExpressionOrDeclaration = isAnyFunctionExpressionOrDeclaration;
function isLastTokenOnLine(token, text) {
var _nextToken = TypeScript.nextToken(token, text);
if (_nextToken === undefined) {
return true;
}
var lineMap = text.lineMap();
var tokenLine = lineMap.getLineNumberFromPosition(TypeScript.fullEnd(token));
var nextTokenLine = lineMap.getLineNumberFromPosition(TypeScript.start(_nextToken, text));
return tokenLine !== nextTokenLine;
}
SyntaxUtilities.isLastTokenOnLine = isLastTokenOnLine;
function isLeftHandSizeExpression(element) {
if (element) {
switch (element.kind) {
case 176 /* MemberAccessExpression */:
case 185 /* ElementAccessExpression */:
case 189 /* TemplateAccessExpression */:
case 180 /* ObjectCreationExpression */:
case 177 /* InvocationExpression */:
case 178 /* ArrayLiteralExpression */:
case 181 /* ParenthesizedExpression */:
case 179 /* ObjectLiteralExpression */:
case 186 /* FunctionExpression */:
case 9 /* IdentifierName */:
case 10 /* RegularExpressionLiteral */:
case 11 /* NumericLiteral */:
case 12 /* StringLiteral */:
case 26 /* FalseKeyword */:
case 34 /* NullKeyword */:
case 37 /* ThisKeyword */:
case 39 /* TrueKeyword */:
case 52 /* SuperKeyword */:
return true;
}
}
return false;
}
SyntaxUtilities.isLeftHandSizeExpression = isLeftHandSizeExpression;
function isSwitchClause(element) {
if (element) {
switch (element.kind) {
case 198 /* CaseSwitchClause */:
case 199 /* DefaultSwitchClause */:
return true;
}
}
return false;
}
SyntaxUtilities.isSwitchClause = isSwitchClause;
function isTypeMember(element) {
if (element) {
switch (element.kind) {
case 148 /* ConstructSignature */:
case 150 /* MethodSignature */:
case 149 /* IndexSignature */:
case 146 /* PropertySignature */:
case 147 /* CallSignature */:
return true;
}
}
return false;
}
SyntaxUtilities.isTypeMember = isTypeMember;
function isClassElement(element) {
if (element) {
switch (element.kind) {
case 142 /* ConstructorDeclaration */:
case 143 /* IndexMemberDeclaration */:
case 140 /* MemberFunctionDeclaration */:
case 144 /* GetAccessor */:
case 145 /* SetAccessor */:
case 140 /* MemberFunctionDeclaration */:
case 141 /* MemberVariableDeclaration */:
return true;
}
}
return false;
}
SyntaxUtilities.isClassElement = isClassElement;
function isModuleElement(element) {
if (element) {
switch (element.kind) {
case 138 /* ImportDeclaration */:
case 139 /* ExportAssignment */:
case 136 /* ClassDeclaration */:
case 133 /* InterfaceDeclaration */:
case 135 /* ModuleDeclaration */:
case 137 /* EnumDeclaration */:
case 134 /* FunctionDeclaration */:
case 153 /* VariableStatement */:
case 151 /* Block */:
case 152 /* IfStatement */:
case 154 /* ExpressionStatement */:
case 162 /* ThrowStatement */:
case 155 /* ReturnStatement */:
case 156 /* SwitchStatement */:
case 157 /* BreakStatement */:
case 158 /* ContinueStatement */:
case 160 /* ForInStatement */:
case 159 /* ForStatement */:
case 163 /* WhileStatement */:
case 168 /* WithStatement */:
case 161 /* EmptyStatement */:
case 164 /* TryStatement */:
case 165 /* LabeledStatement */:
case 166 /* DoStatement */:
case 167 /* DebuggerStatement */:
return true;
}
}
return false;
}
SyntaxUtilities.isModuleElement = isModuleElement;
function isStatement(element) {
if (element) {
switch (element.kind) {
case 134 /* FunctionDeclaration */:
case 153 /* VariableStatement */:
case 151 /* Block */:
case 152 /* IfStatement */:
case 154 /* ExpressionStatement */:
case 162 /* ThrowStatement */:
case 155 /* ReturnStatement */:
case 156 /* SwitchStatement */:
case 157 /* BreakStatement */:
case 158 /* ContinueStatement */:
case 160 /* ForInStatement */:
case 159 /* ForStatement */:
case 163 /* WhileStatement */:
case 168 /* WithStatement */:
case 161 /* EmptyStatement */:
case 164 /* TryStatement */:
case 165 /* LabeledStatement */:
case 166 /* DoStatement */:
case 167 /* DebuggerStatement */:
return true;
}
}
return false;
}
SyntaxUtilities.isStatement = isStatement;
function isAngleBracket(positionedElement) {
var element = positionedElement;
var parent = positionedElement.parent;
if (parent && (element.kind === 82 /* LessThanToken */ || element.kind === 83 /* GreaterThanToken */)) {
switch (parent.kind) {
case 194 /* TypeArgumentList */:
case 195 /* TypeParameterList */:
case 184 /* CastExpression */:
return true;
}
}
return false;
}
SyntaxUtilities.isAngleBracket = isAngleBracket;
function getToken(list, kind) {
for (var i = 0, n = list.length; i < n; i++) {
var token = list[i];
if (token.kind === kind) {
return token;
}
}
return undefined;
}
SyntaxUtilities.getToken = getToken;
function containsToken(list, kind) {
return !!SyntaxUtilities.getToken(list, kind);
}
SyntaxUtilities.containsToken = containsToken;
function hasExportKeyword(moduleElement) {
return !!SyntaxUtilities.getExportKeyword(moduleElement);
}
SyntaxUtilities.hasExportKeyword = hasExportKeyword;
function getExportKeyword(moduleElement) {
switch (moduleElement.kind) {
case 135 /* ModuleDeclaration */:
case 136 /* ClassDeclaration */:
case 134 /* FunctionDeclaration */:
case 153 /* VariableStatement */:
case 137 /* EnumDeclaration */:
case 133 /* InterfaceDeclaration */:
case 138 /* ImportDeclaration */:
return SyntaxUtilities.getToken(moduleElement.modifiers, 49 /* ExportKeyword */);
default:
return undefined;
}
}
SyntaxUtilities.getExportKeyword = getExportKeyword;
function isAmbientDeclarationSyntax(positionNode) {
if (!positionNode) {
return false;
}
var node = positionNode;
switch (node.kind) {
case 135 /* ModuleDeclaration */:
case 136 /* ClassDeclaration */:
case 134 /* FunctionDeclaration */:
case 153 /* VariableStatement */:
case 137 /* EnumDeclaration */:
if (SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */)) {
return true;
}
case 138 /* ImportDeclaration */:
case 142 /* ConstructorDeclaration */:
case 140 /* MemberFunctionDeclaration */:
case 144 /* GetAccessor */:
case 145 /* SetAccessor */:
case 141 /* MemberVariableDeclaration */:
if (SyntaxUtilities.isClassElement(node) || SyntaxUtilities.isModuleElement(node)) {
return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(positionNode));
}
case 209 /* EnumElement */:
return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(TypeScript.Syntax.containingNode(positionNode)));
default:
return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(positionNode));
}
}
SyntaxUtilities.isAmbientDeclarationSyntax = isAmbientDeclarationSyntax;
})(SyntaxUtilities = TypeScript.SyntaxUtilities || (TypeScript.SyntaxUtilities = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function visitNodeOrToken(visitor, element) {
if (element === undefined) {
return undefined;
}
switch (element.kind) {
case 122 /* SourceUnit */: return visitor.visitSourceUnit(element);
case 123 /* QualifiedName */: return visitor.visitQualifiedName(element);
case 124 /* ObjectType */: return visitor.visitObjectType(element);
case 125 /* FunctionType */: return visitor.visitFunctionType(element);
case 126 /* ArrayType */: return visitor.visitArrayType(element);
case 127 /* ConstructorType */: return visitor.visitConstructorType(element);
case 128 /* GenericType */: return visitor.visitGenericType(element);
case 129 /* TypeQuery */: return visitor.visitTypeQuery(element);
case 130 /* TupleType */: return visitor.visitTupleType(element);
case 131 /* UnionType */: return visitor.visitUnionType(element);
case 132 /* ParenthesizedType */: return visitor.visitParenthesizedType(element);
case 133 /* InterfaceDeclaration */: return visitor.visitInterfaceDeclaration(element);
case 134 /* FunctionDeclaration */: return visitor.visitFunctionDeclaration(element);
case 135 /* ModuleDeclaration */: return visitor.visitModuleDeclaration(element);
case 136 /* ClassDeclaration */: return visitor.visitClassDeclaration(element);
case 137 /* EnumDeclaration */: return visitor.visitEnumDeclaration(element);
case 138 /* ImportDeclaration */: return visitor.visitImportDeclaration(element);
case 139 /* ExportAssignment */: return visitor.visitExportAssignment(element);
case 140 /* MemberFunctionDeclaration */: return visitor.visitMemberFunctionDeclaration(element);
case 141 /* MemberVariableDeclaration */: return visitor.visitMemberVariableDeclaration(element);
case 142 /* ConstructorDeclaration */: return visitor.visitConstructorDeclaration(element);
case 143 /* IndexMemberDeclaration */: return visitor.visitIndexMemberDeclaration(element);
case 144 /* GetAccessor */: return visitor.visitGetAccessor(element);
case 145 /* SetAccessor */: return visitor.visitSetAccessor(element);
case 146 /* PropertySignature */: return visitor.visitPropertySignature(element);
case 147 /* CallSignature */: return visitor.visitCallSignature(element);
case 148 /* ConstructSignature */: return visitor.visitConstructSignature(element);
case 149 /* IndexSignature */: return visitor.visitIndexSignature(element);
case 150 /* MethodSignature */: return visitor.visitMethodSignature(element);
case 151 /* Block */: return visitor.visitBlock(element);
case 152 /* IfStatement */: return visitor.visitIfStatement(element);
case 153 /* VariableStatement */: return visitor.visitVariableStatement(element);
case 154 /* ExpressionStatement */: return visitor.visitExpressionStatement(element);
case 155 /* ReturnStatement */: return visitor.visitReturnStatement(element);
case 156 /* SwitchStatement */: return visitor.visitSwitchStatement(element);
case 157 /* BreakStatement */: return visitor.visitBreakStatement(element);
case 158 /* ContinueStatement */: return visitor.visitContinueStatement(element);
case 159 /* ForStatement */: return visitor.visitForStatement(element);
case 160 /* ForInStatement */: return visitor.visitForInStatement(element);
case 161 /* EmptyStatement */: return visitor.visitEmptyStatement(element);
case 162 /* ThrowStatement */: return visitor.visitThrowStatement(element);
case 163 /* WhileStatement */: return visitor.visitWhileStatement(element);
case 164 /* TryStatement */: return visitor.visitTryStatement(element);
case 165 /* LabeledStatement */: return visitor.visitLabeledStatement(element);
case 166 /* DoStatement */: return visitor.visitDoStatement(element);
case 167 /* DebuggerStatement */: return visitor.visitDebuggerStatement(element);
case 168 /* WithStatement */: return visitor.visitWithStatement(element);
case 169 /* PrefixUnaryExpression */: return visitor.visitPrefixUnaryExpression(element);
case 170 /* DeleteExpression */: return visitor.visitDeleteExpression(element);
case 171 /* TypeOfExpression */: return visitor.visitTypeOfExpression(element);
case 172 /* VoidExpression */: return visitor.visitVoidExpression(element);
case 173 /* ConditionalExpression */: return visitor.visitConditionalExpression(element);
case 174 /* BinaryExpression */: return visitor.visitBinaryExpression(element);
case 175 /* PostfixUnaryExpression */: return visitor.visitPostfixUnaryExpression(element);
case 176 /* MemberAccessExpression */: return visitor.visitMemberAccessExpression(element);
case 177 /* InvocationExpression */: return visitor.visitInvocationExpression(element);
case 178 /* ArrayLiteralExpression */: return visitor.visitArrayLiteralExpression(element);
case 179 /* ObjectLiteralExpression */: return visitor.visitObjectLiteralExpression(element);
case 180 /* ObjectCreationExpression */: return visitor.visitObjectCreationExpression(element);
case 181 /* ParenthesizedExpression */: return visitor.visitParenthesizedExpression(element);
case 182 /* ParenthesizedArrowFunctionExpression */: return visitor.visitParenthesizedArrowFunctionExpression(element);
case 183 /* SimpleArrowFunctionExpression */: return visitor.visitSimpleArrowFunctionExpression(element);
case 184 /* CastExpression */: return visitor.visitCastExpression(element);
case 185 /* ElementAccessExpression */: return visitor.visitElementAccessExpression(element);
case 186 /* FunctionExpression */: return visitor.visitFunctionExpression(element);
case 187 /* OmittedExpression */: return visitor.visitOmittedExpression(element);
case 188 /* TemplateExpression */: return visitor.visitTemplateExpression(element);
case 189 /* TemplateAccessExpression */: return visitor.visitTemplateAccessExpression(element);
case 190 /* VariableDeclaration */: return visitor.visitVariableDeclaration(element);
case 191 /* VariableDeclarator */: return visitor.visitVariableDeclarator(element);
case 192 /* ArgumentList */: return visitor.visitArgumentList(element);
case 193 /* ParameterList */: return visitor.visitParameterList(element);
case 194 /* TypeArgumentList */: return visitor.visitTypeArgumentList(element);
case 195 /* TypeParameterList */: return visitor.visitTypeParameterList(element);
case 196 /* HeritageClause */: return visitor.visitHeritageClause(element);
case 197 /* EqualsValueClause */: return visitor.visitEqualsValueClause(element);
case 198 /* CaseSwitchClause */: return visitor.visitCaseSwitchClause(element);
case 199 /* DefaultSwitchClause */: return visitor.visitDefaultSwitchClause(element);
case 200 /* ElseClause */: return visitor.visitElseClause(element);
case 201 /* CatchClause */: return visitor.visitCatchClause(element);
case 202 /* FinallyClause */: return visitor.visitFinallyClause(element);
case 203 /* TemplateClause */: return visitor.visitTemplateClause(element);
case 204 /* TypeParameter */: return visitor.visitTypeParameter(element);
case 205 /* Constraint */: return visitor.visitConstraint(element);
case 206 /* SimplePropertyAssignment */: return visitor.visitSimplePropertyAssignment(element);
case 207 /* FunctionPropertyAssignment */: return visitor.visitFunctionPropertyAssignment(element);
case 208 /* Parameter */: return visitor.visitParameter(element);
case 209 /* EnumElement */: return visitor.visitEnumElement(element);
case 210 /* TypeAnnotation */: return visitor.visitTypeAnnotation(element);
case 211 /* ComputedPropertyName */: return visitor.visitComputedPropertyName(element);
case 212 /* ExternalModuleReference */: return visitor.visitExternalModuleReference(element);
case 213 /* ModuleNameModuleReference */: return visitor.visitModuleNameModuleReference(element);
default: return visitor.visitToken(element);
}
}
TypeScript.visitNodeOrToken = visitNodeOrToken;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var SyntaxWalker = (function () {
function SyntaxWalker() {
}
SyntaxWalker.prototype.visitToken = function (token) {
};
SyntaxWalker.prototype.visitOptionalToken = function (token) {
if (token === undefined) {
return;
}
this.visitToken(token);
};
SyntaxWalker.prototype.visitList = function (list) {
for (var i = 0, n = list.length; i < n; i++) {
TypeScript.visitNodeOrToken(this, list[i]);
}
};
SyntaxWalker.prototype.visitSourceUnit = function (node) {
this.visitList(node.moduleElements);
this.visitToken(node.endOfFileToken);
};
SyntaxWalker.prototype.visitQualifiedName = function (node) {
TypeScript.visitNodeOrToken(this, node.left);
this.visitToken(node.dotToken);
this.visitToken(node.right);
};
SyntaxWalker.prototype.visitObjectType = function (node) {
this.visitToken(node.openBraceToken);
this.visitList(node.typeMembers);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitFunctionType = function (node) {
TypeScript.visitNodeOrToken(this, node.typeParameterList);
TypeScript.visitNodeOrToken(this, node.parameterList);
this.visitToken(node.equalsGreaterThanToken);
TypeScript.visitNodeOrToken(this, node.type);
};
SyntaxWalker.prototype.visitArrayType = function (node) {
TypeScript.visitNodeOrToken(this, node.type);
this.visitToken(node.openBracketToken);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitConstructorType = function (node) {
this.visitToken(node.newKeyword);
TypeScript.visitNodeOrToken(this, node.typeParameterList);
TypeScript.visitNodeOrToken(this, node.parameterList);
this.visitToken(node.equalsGreaterThanToken);
TypeScript.visitNodeOrToken(this, node.type);
};
SyntaxWalker.prototype.visitGenericType = function (node) {
TypeScript.visitNodeOrToken(this, node.name);
TypeScript.visitNodeOrToken(this, node.typeArgumentList);
};
SyntaxWalker.prototype.visitTypeQuery = function (node) {
this.visitToken(node.typeOfKeyword);
TypeScript.visitNodeOrToken(this, node.name);
};
SyntaxWalker.prototype.visitTupleType = function (node) {
this.visitToken(node.openBracketToken);
this.visitList(node.types);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitUnionType = function (node) {
TypeScript.visitNodeOrToken(this, node.left);
this.visitToken(node.barToken);
TypeScript.visitNodeOrToken(this, node.right);
};
SyntaxWalker.prototype.visitParenthesizedType = function (node) {
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.type);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.interfaceKeyword);
this.visitToken(node.identifier);
TypeScript.visitNodeOrToken(this, node.typeParameterList);
this.visitList(node.heritageClauses);
TypeScript.visitNodeOrToken(this, node.body);
};
SyntaxWalker.prototype.visitFunctionDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.functionKeyword);
this.visitToken(node.identifier);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.body);
};
SyntaxWalker.prototype.visitModuleDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.moduleKeyword);
TypeScript.visitNodeOrToken(this, node.name);
this.visitToken(node.openBraceToken);
this.visitList(node.moduleElements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitClassDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.classKeyword);
this.visitToken(node.identifier);
TypeScript.visitNodeOrToken(this, node.typeParameterList);
this.visitList(node.heritageClauses);
this.visitToken(node.openBraceToken);
this.visitList(node.classElements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitEnumDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.enumKeyword);
this.visitToken(node.identifier);
this.visitToken(node.openBraceToken);
this.visitList(node.enumElements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitImportDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.importKeyword);
this.visitToken(node.identifier);
this.visitToken(node.equalsToken);
TypeScript.visitNodeOrToken(this, node.moduleReference);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitExportAssignment = function (node) {
this.visitToken(node.exportKeyword);
this.visitToken(node.equalsToken);
this.visitToken(node.identifier);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) {
this.visitList(node.modifiers);
TypeScript.visitNodeOrToken(this, node.propertyName);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.body);
};
SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) {
this.visitList(node.modifiers);
TypeScript.visitNodeOrToken(this, node.variableDeclarator);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitConstructorDeclaration = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.constructorKeyword);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.body);
};
SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) {
this.visitList(node.modifiers);
TypeScript.visitNodeOrToken(this, node.indexSignature);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitGetAccessor = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.getKeyword);
TypeScript.visitNodeOrToken(this, node.propertyName);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.block);
};
SyntaxWalker.prototype.visitSetAccessor = function (node) {
this.visitList(node.modifiers);
this.visitToken(node.setKeyword);
TypeScript.visitNodeOrToken(this, node.propertyName);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.block);
};
SyntaxWalker.prototype.visitPropertySignature = function (node) {
TypeScript.visitNodeOrToken(this, node.propertyName);
this.visitOptionalToken(node.questionToken);
TypeScript.visitNodeOrToken(this, node.typeAnnotation);
};
SyntaxWalker.prototype.visitCallSignature = function (node) {
TypeScript.visitNodeOrToken(this, node.typeParameterList);
TypeScript.visitNodeOrToken(this, node.parameterList);
TypeScript.visitNodeOrToken(this, node.typeAnnotation);
};
SyntaxWalker.prototype.visitConstructSignature = function (node) {
this.visitToken(node.newKeyword);
TypeScript.visitNodeOrToken(this, node.callSignature);
};
SyntaxWalker.prototype.visitIndexSignature = function (node) {
this.visitToken(node.openBracketToken);
this.visitList(node.parameters);
this.visitToken(node.closeBracketToken);
TypeScript.visitNodeOrToken(this, node.typeAnnotation);
};
SyntaxWalker.prototype.visitMethodSignature = function (node) {
TypeScript.visitNodeOrToken(this, node.propertyName);
this.visitOptionalToken(node.questionToken);
TypeScript.visitNodeOrToken(this, node.callSignature);
};
SyntaxWalker.prototype.visitBlock = function (node) {
this.visitToken(node.openBraceToken);
this.visitList(node.statements);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitIfStatement = function (node) {
this.visitToken(node.ifKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
TypeScript.visitNodeOrToken(this, node.statement);
TypeScript.visitNodeOrToken(this, node.elseClause);
};
SyntaxWalker.prototype.visitVariableStatement = function (node) {
this.visitList(node.modifiers);
TypeScript.visitNodeOrToken(this, node.variableDeclaration);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitExpressionStatement = function (node) {
TypeScript.visitNodeOrToken(this, node.expression);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitReturnStatement = function (node) {
this.visitToken(node.returnKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitSwitchStatement = function (node) {
this.visitToken(node.switchKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.closeParenToken);
this.visitToken(node.openBraceToken);
this.visitList(node.switchClauses);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitBreakStatement = function (node) {
this.visitToken(node.breakKeyword);
this.visitOptionalToken(node.identifier);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitContinueStatement = function (node) {
this.visitToken(node.continueKeyword);
this.visitOptionalToken(node.identifier);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitForStatement = function (node) {
this.visitToken(node.forKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.initializer);
this.visitToken(node.firstSemicolonToken);
TypeScript.visitNodeOrToken(this, node.condition);
this.visitToken(node.secondSemicolonToken);
TypeScript.visitNodeOrToken(this, node.incrementor);
this.visitToken(node.closeParenToken);
TypeScript.visitNodeOrToken(this, node.statement);
};
SyntaxWalker.prototype.visitForInStatement = function (node) {
this.visitToken(node.forKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.left);
this.visitToken(node.inKeyword);
TypeScript.visitNodeOrToken(this, node.right);
this.visitToken(node.closeParenToken);
TypeScript.visitNodeOrToken(this, node.statement);
};
SyntaxWalker.prototype.visitEmptyStatement = function (node) {
this.visitToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitThrowStatement = function (node) {
this.visitToken(node.throwKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitWhileStatement = function (node) {
this.visitToken(node.whileKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
TypeScript.visitNodeOrToken(this, node.statement);
};
SyntaxWalker.prototype.visitTryStatement = function (node) {
this.visitToken(node.tryKeyword);
TypeScript.visitNodeOrToken(this, node.block);
TypeScript.visitNodeOrToken(this, node.catchClause);
TypeScript.visitNodeOrToken(this, node.finallyClause);
};
SyntaxWalker.prototype.visitLabeledStatement = function (node) {
this.visitToken(node.identifier);
this.visitToken(node.colonToken);
TypeScript.visitNodeOrToken(this, node.statement);
};
SyntaxWalker.prototype.visitDoStatement = function (node) {
this.visitToken(node.doKeyword);
TypeScript.visitNodeOrToken(this, node.statement);
this.visitToken(node.whileKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitDebuggerStatement = function (node) {
this.visitToken(node.debuggerKeyword);
this.visitOptionalToken(node.semicolonToken);
};
SyntaxWalker.prototype.visitWithStatement = function (node) {
this.visitToken(node.withKeyword);
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
TypeScript.visitNodeOrToken(this, node.statement);
};
SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) {
this.visitToken(node.operatorToken);
TypeScript.visitNodeOrToken(this, node.operand);
};
SyntaxWalker.prototype.visitDeleteExpression = function (node) {
this.visitToken(node.deleteKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
};
SyntaxWalker.prototype.visitTypeOfExpression = function (node) {
this.visitToken(node.typeOfKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
};
SyntaxWalker.prototype.visitVoidExpression = function (node) {
this.visitToken(node.voidKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
};
SyntaxWalker.prototype.visitConditionalExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.condition);
this.visitToken(node.questionToken);
TypeScript.visitNodeOrToken(this, node.whenTrue);
this.visitToken(node.colonToken);
TypeScript.visitNodeOrToken(this, node.whenFalse);
};
SyntaxWalker.prototype.visitBinaryExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.left);
this.visitToken(node.operatorToken);
TypeScript.visitNodeOrToken(this, node.right);
};
SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.operand);
this.visitToken(node.operatorToken);
};
SyntaxWalker.prototype.visitMemberAccessExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.dotToken);
this.visitToken(node.name);
};
SyntaxWalker.prototype.visitInvocationExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.expression);
TypeScript.visitNodeOrToken(this, node.argumentList);
};
SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) {
this.visitToken(node.openBracketToken);
this.visitList(node.expressions);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) {
this.visitToken(node.openBraceToken);
this.visitList(node.propertyAssignments);
this.visitToken(node.closeBraceToken);
};
SyntaxWalker.prototype.visitObjectCreationExpression = function (node) {
this.visitToken(node.newKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
TypeScript.visitNodeOrToken(this, node.argumentList);
};
SyntaxWalker.prototype.visitParenthesizedExpression = function (node) {
this.visitToken(node.openParenToken);
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.callSignature);
this.visitToken(node.equalsGreaterThanToken);
TypeScript.visitNodeOrToken(this, node.body);
};
SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.parameter);
this.visitToken(node.equalsGreaterThanToken);
TypeScript.visitNodeOrToken(this, node.body);
};
SyntaxWalker.prototype.visitCastExpression = function (node) {
this.visitToken(node.lessThanToken);
TypeScript.visitNodeOrToken(this, node.type);
this.visitToken(node.greaterThanToken);
TypeScript.visitNodeOrToken(this, node.expression);
};
SyntaxWalker.prototype.visitElementAccessExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.openBracketToken);
TypeScript.visitNodeOrToken(this, node.argumentExpression);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitFunctionExpression = function (node) {
this.visitToken(node.functionKeyword);
this.visitOptionalToken(node.identifier);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.block);
};
SyntaxWalker.prototype.visitOmittedExpression = function (node) {
};
SyntaxWalker.prototype.visitTemplateExpression = function (node) {
this.visitToken(node.templateStartToken);
this.visitList(node.templateClauses);
};
SyntaxWalker.prototype.visitTemplateAccessExpression = function (node) {
TypeScript.visitNodeOrToken(this, node.expression);
TypeScript.visitNodeOrToken(this, node.templateExpression);
};
SyntaxWalker.prototype.visitVariableDeclaration = function (node) {
this.visitToken(node.varKeyword);
this.visitList(node.variableDeclarators);
};
SyntaxWalker.prototype.visitVariableDeclarator = function (node) {
TypeScript.visitNodeOrToken(this, node.propertyName);
TypeScript.visitNodeOrToken(this, node.typeAnnotation);
TypeScript.visitNodeOrToken(this, node.equalsValueClause);
};
SyntaxWalker.prototype.visitArgumentList = function (node) {
TypeScript.visitNodeOrToken(this, node.typeArgumentList);
this.visitToken(node.openParenToken);
this.visitList(node.arguments);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitParameterList = function (node) {
this.visitToken(node.openParenToken);
this.visitList(node.parameters);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitTypeArgumentList = function (node) {
this.visitToken(node.lessThanToken);
this.visitList(node.typeArguments);
this.visitToken(node.greaterThanToken);
};
SyntaxWalker.prototype.visitTypeParameterList = function (node) {
this.visitToken(node.lessThanToken);
this.visitList(node.typeParameters);
this.visitToken(node.greaterThanToken);
};
SyntaxWalker.prototype.visitHeritageClause = function (node) {
this.visitToken(node.extendsOrImplementsKeyword);
this.visitList(node.typeNames);
};
SyntaxWalker.prototype.visitEqualsValueClause = function (node) {
this.visitToken(node.equalsToken);
TypeScript.visitNodeOrToken(this, node.value);
};
SyntaxWalker.prototype.visitCaseSwitchClause = function (node) {
this.visitToken(node.caseKeyword);
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.colonToken);
this.visitList(node.statements);
};
SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) {
this.visitToken(node.defaultKeyword);
this.visitToken(node.colonToken);
this.visitList(node.statements);
};
SyntaxWalker.prototype.visitElseClause = function (node) {
this.visitToken(node.elseKeyword);
TypeScript.visitNodeOrToken(this, node.statement);
};
SyntaxWalker.prototype.visitCatchClause = function (node) {
this.visitToken(node.catchKeyword);
this.visitToken(node.openParenToken);
this.visitToken(node.identifier);
TypeScript.visitNodeOrToken(this, node.typeAnnotation);
this.visitToken(node.closeParenToken);
TypeScript.visitNodeOrToken(this, node.block);
};
SyntaxWalker.prototype.visitFinallyClause = function (node) {
this.visitToken(node.finallyKeyword);
TypeScript.visitNodeOrToken(this, node.block);
};
SyntaxWalker.prototype.visitTemplateClause = function (node) {
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.templateMiddleOrEndToken);
};
SyntaxWalker.prototype.visitTypeParameter = function (node) {
this.visitToken(node.identifier);
TypeScript.visitNodeOrToken(this, node.constraint);
};
SyntaxWalker.prototype.visitConstraint = function (node) {
this.visitToken(node.extendsKeyword);
TypeScript.visitNodeOrToken(this, node.typeOrExpression);
};
SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) {
TypeScript.visitNodeOrToken(this, node.propertyName);
this.visitToken(node.colonToken);
TypeScript.visitNodeOrToken(this, node.expression);
};
SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) {
TypeScript.visitNodeOrToken(this, node.propertyName);
TypeScript.visitNodeOrToken(this, node.callSignature);
TypeScript.visitNodeOrToken(this, node.block);
};
SyntaxWalker.prototype.visitParameter = function (node) {
this.visitOptionalToken(node.dotDotDotToken);
this.visitList(node.modifiers);
this.visitToken(node.identifier);
this.visitOptionalToken(node.questionToken);
TypeScript.visitNodeOrToken(this, node.typeAnnotation);
TypeScript.visitNodeOrToken(this, node.equalsValueClause);
};
SyntaxWalker.prototype.visitEnumElement = function (node) {
TypeScript.visitNodeOrToken(this, node.propertyName);
TypeScript.visitNodeOrToken(this, node.equalsValueClause);
};
SyntaxWalker.prototype.visitTypeAnnotation = function (node) {
this.visitToken(node.colonToken);
TypeScript.visitNodeOrToken(this, node.type);
};
SyntaxWalker.prototype.visitComputedPropertyName = function (node) {
this.visitToken(node.openBracketToken);
TypeScript.visitNodeOrToken(this, node.expression);
this.visitToken(node.closeBracketToken);
};
SyntaxWalker.prototype.visitExternalModuleReference = function (node) {
this.visitToken(node.requireKeyword);
this.visitToken(node.openParenToken);
this.visitToken(node.stringLiteral);
this.visitToken(node.closeParenToken);
};
SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) {
TypeScript.visitNodeOrToken(this, node.moduleName);
};
return SyntaxWalker;
})();
TypeScript.SyntaxWalker = SyntaxWalker;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Parser;
(function (Parser) {
function createParseSyntaxTree() {
var fileName;
var source;
var languageVersion;
var listParsingState = 0;
var strictMode = false;
var disallowIn = false;
var diagnostics = [];
var parseNodeData = 0;
var _skippedTokens = undefined;
function parseSyntaxTree(_source, isDeclaration) {
fileName = _source.fileName;
source = _source;
languageVersion = source.languageVersion;
var result = parseSyntaxTreeWorker(isDeclaration);
diagnostics = [];
parseNodeData = 0 /* None */;
fileName = undefined;
source.release();
source = undefined;
_source = undefined;
return result;
}
function parseSyntaxTreeWorker(isDeclaration) {
var sourceUnit = parseSourceUnit();
var allDiagnostics = source.tokenDiagnostics().concat(diagnostics);
allDiagnostics.sort(function (a, b) { return a.start() - b.start(); });
return new TypeScript.SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, fileName, source.text, languageVersion);
}
function getRewindPoint() {
var rewindPoint = source.getRewindPoint();
rewindPoint.diagnosticsCount = diagnostics.length;
rewindPoint.skippedTokens = _skippedTokens ? _skippedTokens.slice(0) : undefined;
return rewindPoint;
}
function rewind(rewindPoint) {
source.rewind(rewindPoint);
diagnostics.length = rewindPoint.diagnosticsCount;
_skippedTokens = rewindPoint.skippedTokens;
}
function releaseRewindPoint(rewindPoint) {
source.releaseRewindPoint(rewindPoint);
}
function currentNode() {
if (_skippedTokens) {
return null;
}
var node = source.currentNode();
if (!node || TypeScript.parsedInStrictMode(node) !== strictMode || TypeScript.parsedInDisallowInMode(node) !== disallowIn) {
return undefined;
}
return node;
}
function currentToken() {
return source.currentToken();
}
function currentContextualToken() {
return source.currentContextualToken();
}
function peekToken(n) {
return source.peekToken(n);
}
function skipToken(token) {
_skippedTokens = _skippedTokens || [];
_skippedTokens.push(token);
source.consumeToken(token);
}
function consumeToken(token) {
source.consumeToken(token);
if (_skippedTokens) {
token = addSkippedTokensBeforeToken(token, _skippedTokens);
_skippedTokens = undefined;
}
return token;
}
function addSkippedTokensBeforeToken(token, skippedTokens) {
var leadingTrivia = [];
for (var i = 0, n = skippedTokens.length; i < n; i++) {
var skippedToken = skippedTokens[i];
addSkippedTokenToTriviaArray(leadingTrivia, skippedToken);
}
addTriviaTo(token.leadingTrivia(source.text), leadingTrivia);
var updatedToken = TypeScript.Syntax.withLeadingTrivia(token, TypeScript.Syntax.triviaList(leadingTrivia), source.text);
updatedToken.setFullStart(skippedTokens[0].fullStart());
return updatedToken;
}
function addSkippedTokenToTriviaArray(array, skippedToken) {
addTriviaTo(skippedToken.leadingTrivia(source.text), array);
var trimmedToken = TypeScript.Syntax.withLeadingTrivia(skippedToken, TypeScript.Syntax.emptyTriviaList, source.text);
trimmedToken.setFullStart(TypeScript.start(skippedToken, source.text));
array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken, source.text));
}
function addTriviaTo(list, array) {
for (var i = 0, n = list.count(); i < n; i++) {
array.push(list.syntaxTriviaAt(i));
}
}
function consumeNode(node) {
TypeScript.Debug.assert(_skippedTokens === undefined);
source.consumeNode(node);
}
function eatToken(kind) {
var token = currentToken();
if (token.kind === kind) {
return consumeToken(token);
}
return createMissingToken(kind, token);
}
function tryEatToken(kind) {
var _currentToken = currentToken();
if (_currentToken.kind === kind) {
return consumeToken(_currentToken);
}
return undefined;
}
function isIdentifier(token) {
var tokenKind = token.kind;
if (tokenKind === 9 /* IdentifierName */) {
return true;
}
if (tokenKind >= TypeScript.SyntaxKind.FirstFutureReservedStrictKeyword) {
if (tokenKind <= TypeScript.SyntaxKind.LastFutureReservedStrictKeyword) {
return !strictMode;
}
return tokenKind <= TypeScript.SyntaxKind.LastTypeScriptKeyword;
}
return false;
}
function eatIdentifierNameToken() {
var token = currentToken();
var tokenKind = token.kind;
if (tokenKind === 9 /* IdentifierName */) {
return consumeToken(token);
}
if (TypeScript.SyntaxFacts.isAnyKeyword(tokenKind)) {
return TypeScript.Syntax.convertKeywordToIdentifier(consumeToken(token));
}
return createMissingToken(9 /* IdentifierName */, token);
}
function eatOptionalIdentifierToken() {
return isIdentifier(currentToken()) ? eatIdentifierToken() : undefined;
}
function eatIdentifierToken(diagnosticCode) {
var token = currentToken();
if (isIdentifier(token)) {
if (token.kind === 9 /* IdentifierName */) {
return consumeToken(token);
}
return TypeScript.Syntax.convertKeywordToIdentifier(consumeToken(token));
}
return createMissingToken(9 /* IdentifierName */, token, diagnosticCode);
}
function isOnDifferentLineThanPreviousToken(token) {
return token.hasLeadingNewLine();
}
function canEatAutomaticSemicolon(allowWithoutNewLine) {
var token = currentToken();
var tokenKind = token.kind;
if (tokenKind === 8 /* EndOfFileToken */) {
return true;
}
if (tokenKind === 73 /* CloseBraceToken */) {
return true;
}
if (allowWithoutNewLine) {
return true;
}
if (isOnDifferentLineThanPreviousToken(token)) {
return true;
}
return false;
}
function canEatExplicitOrAutomaticSemicolon(allowWithoutNewline) {
var token = currentToken();
if (token.kind === 80 /* SemicolonToken */) {
return true;
}
return canEatAutomaticSemicolon(allowWithoutNewline);
}
function eatExplicitOrAutomaticSemicolon(allowWithoutNewline) {
var token = currentToken();
if (token.kind === 80 /* SemicolonToken */) {
return consumeToken(token);
}
if (canEatAutomaticSemicolon(allowWithoutNewline)) {
return undefined;
}
return eatToken(80 /* SemicolonToken */);
}
function createMissingToken(expectedKind, actual, diagnosticCode) {
var diagnostic = getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode);
addDiagnostic(diagnostic);
return TypeScript.Syntax.emptyToken(expectedKind);
}
function getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode) {
var token = currentToken();
var args = undefined;
if (!diagnosticCode) {
if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) {
diagnosticCode = TypeScript.DiagnosticCode._0_expected;
args = [TypeScript.SyntaxFacts.getText(expectedKind)];
}
else {
if (actual && TypeScript.SyntaxFacts.isAnyKeyword(actual.kind)) {
diagnosticCode = TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword;
args = [TypeScript.SyntaxFacts.getText(actual.kind)];
}
else {
diagnosticCode = TypeScript.DiagnosticCode.Identifier_expected;
}
}
}
return new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token, source.text), TypeScript.width(token), diagnosticCode, args);
}
function getBinaryExpressionPrecedence(tokenKind) {
switch (tokenKind) {
case 106 /* BarBarToken */: return 2 /* LogicalOrExpressionPrecedence */;
case 105 /* AmpersandAmpersandToken */: return 3 /* LogicalAndExpressionPrecedence */;
case 101 /* BarToken */: return 4 /* BitwiseOrExpressionPrecedence */;
case 102 /* CaretToken */: return 5 /* BitwiseExclusiveOrExpressionPrecedence */;
case 100 /* AmpersandToken */: return 6 /* BitwiseAndExpressionPrecedence */;
case 86 /* EqualsEqualsToken */:
case 88 /* ExclamationEqualsToken */:
case 89 /* EqualsEqualsEqualsToken */:
case 90 /* ExclamationEqualsEqualsToken */:
return 7 /* EqualityExpressionPrecedence */;
case 82 /* LessThanToken */:
case 83 /* GreaterThanToken */:
case 84 /* LessThanEqualsToken */:
case 85 /* GreaterThanEqualsToken */:
case 32 /* InstanceOfKeyword */:
case 31 /* InKeyword */:
return 8 /* RelationalExpressionPrecedence */;
case 97 /* LessThanLessThanToken */:
case 98 /* GreaterThanGreaterThanToken */:
case 99 /* GreaterThanGreaterThanGreaterThanToken */:
return 9 /* ShiftExpressionPrecdence */;
case 91 /* PlusToken */:
case 92 /* MinusToken */:
return 10 /* AdditiveExpressionPrecedence */;
case 93 /* AsteriskToken */:
case 120 /* SlashToken */:
case 94 /* PercentToken */:
return 11 /* MultiplicativeExpressionPrecedence */;
}
throw TypeScript.Errors.invalidOperation();
}
function updateParseNodeData() {
parseNodeData = (strictMode ? 4 /* NodeParsedInStrictModeMask */ : 0) | (disallowIn ? 8 /* NodeParsedInDisallowInMask */ : 0);
}
function setStrictMode(val) {
strictMode = val;
updateParseNodeData();
}
function setDisallowIn(val) {
disallowIn = val;
updateParseNodeData();
}
function parseSourceUnit() {
var savedIsInStrictMode = strictMode;
var moduleElements = parseSyntaxList(0 /* SourceUnit_ModuleElements */, updateStrictModeState);
setStrictMode(savedIsInStrictMode);
var sourceUnit = new TypeScript.SourceUnitSyntax(parseNodeData, moduleElements, consumeToken(currentToken()));
if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) {
TypeScript.Debug.assert(TypeScript.fullWidth(sourceUnit) === source.text.length());
if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) {
TypeScript.Debug.assert(TypeScript.fullText(sourceUnit) === source.text.substr(0, source.text.length()));
}
}
return sourceUnit;
}
function isDirectivePrologueElement(node) {
return node.kind === 154 /* ExpressionStatement */ && node.expression.kind === 12 /* StringLiteral */;
}
function updateStrictModeState(items) {
if (!strictMode) {
for (var i = 0, n = items.length; i < n; i++) {
if (!isDirectivePrologueElement(items[i])) {
return;
}
}
setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1]));
}
}
function isModuleElement(inErrorRecovery) {
if (TypeScript.SyntaxUtilities.isModuleElement(currentNode())) {
return true;
}
var _modifierCount = modifierCount();
return isInterfaceEnumClassModuleImportOrExport(_modifierCount) || isStatement(_modifierCount, inErrorRecovery);
}
function tryParseModuleElement(inErrorRecovery) {
var node = currentNode();
if (TypeScript.SyntaxUtilities.isModuleElement(node)) {
consumeNode(node);
return node;
}
var _currentToken = currentToken();
var _modifierCount = modifierCount();
if (_modifierCount) {
switch (peekToken(_modifierCount).kind) {
case 51 /* ImportKeyword */: return parseImportDeclaration();
case 67 /* ModuleKeyword */: return parseModuleDeclaration();
case 54 /* InterfaceKeyword */: return parseInterfaceDeclaration();
case 46 /* ClassKeyword */: return parseClassDeclaration();
case 48 /* EnumKeyword */: return parseEnumDeclaration();
}
}
var nextToken = peekToken(1);
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 67 /* ModuleKeyword */:
if (isIdentifier(nextToken) || nextToken.kind === 12 /* StringLiteral */) {
return parseModuleDeclaration();
}
break;
case 51 /* ImportKeyword */:
if (isIdentifier(nextToken)) {
return parseImportDeclaration();
}
break;
case 46 /* ClassKeyword */:
if (isIdentifier(nextToken)) {
return parseClassDeclaration();
}
break;
case 48 /* EnumKeyword */:
if (isIdentifier(nextToken)) {
return parseEnumDeclaration();
}
break;
case 54 /* InterfaceKeyword */:
if (isIdentifier(nextToken)) {
return parseInterfaceDeclaration();
}
break;
case 49 /* ExportKeyword */:
if (nextToken.kind === 109 /* EqualsToken */) {
return parseExportAssignment();
}
break;
}
return tryParseStatementWorker(_currentToken, currentTokenKind, _modifierCount, inErrorRecovery);
}
function parseImportDeclaration() {
return new TypeScript.ImportDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(51 /* ImportKeyword */), eatIdentifierToken(), eatToken(109 /* EqualsToken */), parseModuleReference(), eatExplicitOrAutomaticSemicolon(false));
}
function parseExportAssignment() {
return new TypeScript.ExportAssignmentSyntax(parseNodeData, eatToken(49 /* ExportKeyword */), eatToken(109 /* EqualsToken */), eatIdentifierToken(), eatExplicitOrAutomaticSemicolon(false));
}
function parseModuleReference() {
return isExternalModuleReference() ? parseExternalModuleReference() : parseModuleNameModuleReference();
}
function isExternalModuleReference() {
return currentToken().kind === 68 /* RequireKeyword */ && peekToken(1).kind === 74 /* OpenParenToken */;
}
function parseExternalModuleReference() {
return new TypeScript.ExternalModuleReferenceSyntax(parseNodeData, eatToken(68 /* RequireKeyword */), eatToken(74 /* OpenParenToken */), eatToken(12 /* StringLiteral */), eatToken(75 /* CloseParenToken */));
}
function parseModuleNameModuleReference() {
return new TypeScript.ModuleNameModuleReferenceSyntax(parseNodeData, parseName(false));
}
function tryParseTypeArgumentList(inExpression) {
var _currentToken = currentToken();
if (_currentToken.kind !== 82 /* LessThanToken */) {
return undefined;
}
if (!inExpression) {
return new TypeScript.TypeArgumentListSyntax(parseNodeData, consumeToken(_currentToken), parseSeparatedSyntaxList(18 /* TypeArgumentList_Types */), eatToken(83 /* GreaterThanToken */));
}
var rewindPoint = getRewindPoint();
var lessThanToken = consumeToken(_currentToken);
var typeArguments = parseSeparatedSyntaxList(18 /* TypeArgumentList_Types */);
var greaterThanToken = eatToken(83 /* GreaterThanToken */);
if (greaterThanToken.fullWidth() === 0 || !canFollowTypeArgumentListInExpression(currentToken().kind)) {
rewind(rewindPoint);
releaseRewindPoint(rewindPoint);
return undefined;
}
else {
releaseRewindPoint(rewindPoint);
return new TypeScript.TypeArgumentListSyntax(parseNodeData, lessThanToken, typeArguments, greaterThanToken);
}
}
function canFollowTypeArgumentListInExpression(kind) {
switch (kind) {
case 74 /* OpenParenToken */:
case 78 /* DotToken */:
case 75 /* CloseParenToken */:
case 77 /* CloseBracketToken */:
case 108 /* ColonToken */:
case 80 /* SemicolonToken */:
case 81 /* CommaToken */:
case 107 /* QuestionToken */:
case 86 /* EqualsEqualsToken */:
case 89 /* EqualsEqualsEqualsToken */:
case 88 /* ExclamationEqualsToken */:
case 90 /* ExclamationEqualsEqualsToken */:
case 105 /* AmpersandAmpersandToken */:
case 106 /* BarBarToken */:
case 102 /* CaretToken */:
case 100 /* AmpersandToken */:
case 101 /* BarToken */:
case 73 /* CloseBraceToken */:
case 8 /* EndOfFileToken */:
return true;
default:
return false;
}
}
function parseName(allowIdentifierName) {
return tryParseName(allowIdentifierName) || eatIdentifierToken();
}
function eatRightSideOfName(allowIdentifierNames) {
var _currentToken = currentToken();
if (TypeScript.SyntaxFacts.isAnyKeyword(_currentToken.kind) && isOnDifferentLineThanPreviousToken(_currentToken)) {
var token1 = peekToken(1);
if (!TypeScript.existsNewLineBetweenTokens(_currentToken, token1, source.text) && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) {
return createMissingToken(9 /* IdentifierName */, _currentToken);
}
}
return allowIdentifierNames ? eatIdentifierNameToken() : eatIdentifierToken();
}
function tryParseName(allowIdentifierNames) {
var token0 = currentToken();
var shouldContinue = isIdentifier(token0);
if (!shouldContinue) {
return undefined;
}
var current = eatIdentifierToken();
while (shouldContinue && currentToken().kind === 78 /* DotToken */) {
var dotToken = consumeToken(currentToken());
var identifierName = eatRightSideOfName(allowIdentifierNames);
current = new TypeScript.QualifiedNameSyntax(parseNodeData, current, dotToken, identifierName);
shouldContinue = identifierName.fullWidth() > 0;
}
return current;
}
function parseEnumDeclaration() {
var openBraceToken;
return new TypeScript.EnumDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(48 /* EnumKeyword */), eatIdentifierToken(), openBraceToken = eatToken(72 /* OpenBraceToken */), openBraceToken.fullWidth() > 0 ? parseSeparatedSyntaxList(8 /* EnumDeclaration_EnumElements */) : [], eatToken(73 /* CloseBraceToken */));
}
function isEnumElement(inErrorRecovery) {
var node = currentNode();
if (node && node.kind === 209 /* EnumElement */) {
return true;
}
return isPropertyName(0, inErrorRecovery);
}
function allowInAnd(func) {
if (disallowIn) {
setDisallowIn(false);
var result = func();
setDisallowIn(true);
return result;
}
return func();
}
function disallowInAnd(func) {
if (disallowIn) {
return func();
}
setDisallowIn(true);
var result = func();
setDisallowIn(false);
return result;
}
function tryParseEnumElementEqualsValueClause() {
return isEqualsValueClause(false) ? allowInAnd(parseEqualsValueClause) : undefined;
}
function tryParseEnumElement(inErrorRecovery) {
var node = currentNode();
if (node && node.kind === 209 /* EnumElement */) {
consumeNode(node);
return node;
}
if (!isPropertyName(0, inErrorRecovery)) {
return undefined;
}
return new TypeScript.EnumElementSyntax(parseNodeData, parsePropertyName(), tryParseEnumElementEqualsValueClause());
}
function isModifierKind(kind) {
switch (kind) {
case 49 /* ExportKeyword */:
case 59 /* PublicKeyword */:
case 57 /* PrivateKeyword */:
case 58 /* ProtectedKeyword */:
case 60 /* StaticKeyword */:
case 65 /* DeclareKeyword */:
return true;
}
return false;
}
function isModifier(token, index) {
if (isModifierKind(token.kind)) {
var nextToken = peekToken(index + 1);
var nextTokenKind = nextToken.kind;
switch (nextTokenKind) {
case 9 /* IdentifierName */:
case 76 /* OpenBracketToken */:
case 11 /* NumericLiteral */:
case 12 /* StringLiteral */:
return true;
default:
return TypeScript.SyntaxFacts.isAnyKeyword(nextTokenKind);
}
}
return false;
}
function modifierCount() {
var modifierCount = 0;
while (isModifier(peekToken(modifierCount), modifierCount)) {
modifierCount++;
}
return modifierCount;
}
function parseModifiers() {
var tokens = [];
while (true) {
var token = currentToken();
if (isModifier(token, 0)) {
tokens.push(consumeToken(token));
continue;
}
break;
}
return TypeScript.Syntax.list(tokens);
}
function parseHeritageClauses() {
return isHeritageClause() ? parseSyntaxList(10 /* ClassOrInterfaceDeclaration_HeritageClauses */) : [];
}
function tryParseHeritageClauseTypeName() {
return isHeritageClauseTypeName() ? tryParseNameOrGenericType() : undefined;
}
function parseClassDeclaration() {
var openBraceToken;
return new TypeScript.ClassDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(46 /* ClassKeyword */), eatIdentifierToken(), tryParseTypeParameterList(false), parseHeritageClauses(), openBraceToken = eatToken(72 /* OpenBraceToken */), openBraceToken.fullWidth() > 0 ? parseSyntaxList(1 /* ClassDeclaration_ClassElements */) : [], eatToken(73 /* CloseBraceToken */));
}
function isAccessor(modifierCount, inErrorRecovery) {
var tokenKind = peekToken(modifierCount).kind;
if (tokenKind !== 66 /* GetKeyword */ && tokenKind !== 70 /* SetKeyword */) {
return false;
}
return isPropertyName(modifierCount + 1, inErrorRecovery);
}
function parseAccessor(checkForStrictMode) {
var modifiers = parseModifiers();
var _currenToken = currentToken();
var tokenKind = _currenToken.kind;
if (tokenKind === 66 /* GetKeyword */) {
return parseGetMemberAccessorDeclaration(modifiers, _currenToken, checkForStrictMode);
}
else if (tokenKind === 70 /* SetKeyword */) {
return parseSetMemberAccessorDeclaration(modifiers, _currenToken, checkForStrictMode);
}
else {
throw TypeScript.Errors.invalidOperation();
}
}
function parseGetMemberAccessorDeclaration(modifiers, getKeyword, checkForStrictMode) {
return new TypeScript.GetAccessorSyntax(parseNodeData, modifiers, consumeToken(getKeyword), parsePropertyName(), parseCallSignature(false), parseBlock(false, checkForStrictMode));
}
function parseSetMemberAccessorDeclaration(modifiers, setKeyword, checkForStrictMode) {
return new TypeScript.SetAccessorSyntax(parseNodeData, modifiers, consumeToken(setKeyword), parsePropertyName(), parseCallSignature(false), parseBlock(false, checkForStrictMode));
}
function isClassElement(inErrorRecovery) {
if (TypeScript.SyntaxUtilities.isClassElement(currentNode())) {
return true;
}
var _modifierCount = modifierCount();
return isConstructorDeclaration(_modifierCount) || isAccessor(_modifierCount, inErrorRecovery) || isIndexMemberDeclaration(_modifierCount) || isMemberVariableOrFunctionDeclaration(_modifierCount, inErrorRecovery);
}
function isMemberVariableOrFunctionDeclaration(peekIndex, inErrorRecovery) {
if (!isPropertyName(peekIndex, inErrorRecovery)) {
return false;
}
if (!TypeScript.SyntaxFacts.isAnyKeyword(peekToken(peekIndex).kind)) {
return true;
}
var nextToken = peekToken(peekIndex + 1);
switch (nextToken.kind) {
case 80 /* SemicolonToken */:
case 109 /* EqualsToken */:
case 108 /* ColonToken */:
case 73 /* CloseBraceToken */:
case 74 /* OpenParenToken */:
case 82 /* LessThanToken */:
case 8 /* EndOfFileToken */:
return true;
default:
return isOnDifferentLineThanPreviousToken(nextToken);
}
}
function tryParseClassElement(inErrorRecovery) {
var node = currentNode();
if (TypeScript.SyntaxUtilities.isClassElement(node)) {
consumeNode(node);
return node;
}
var _modifierCount = modifierCount();
if (isConstructorDeclaration(_modifierCount)) {
return parseConstructorDeclaration();
}
else if (isIndexMemberDeclaration(_modifierCount)) {
return parseIndexMemberDeclaration();
}
else if (isAccessor(_modifierCount, inErrorRecovery)) {
return parseAccessor(false);
}
else if (isMemberVariableOrFunctionDeclaration(_modifierCount, inErrorRecovery)) {
var modifiers = parseModifiers();
var propertyName = parsePropertyName();
if (isCallSignature(0)) {
return parseMemberFunctionDeclaration(modifiers, propertyName);
}
else {
return parseMemberVariableDeclaration(modifiers, propertyName);
}
}
else {
return undefined;
}
}
function isConstructorDeclaration(modifierCount) {
return peekToken(modifierCount).kind === 64 /* ConstructorKeyword */;
}
function parseConstructorDeclaration() {
return new TypeScript.ConstructorDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(64 /* ConstructorKeyword */), parseCallSignature(false), isBlock() ? parseBlock(false, true) : eatExplicitOrAutomaticSemicolon(false));
}
function parseMemberFunctionDeclaration(modifiers, propertyName) {
var callSignature = parseCallSignature(false);
var parseBlockEvenWithNoOpenBrace = tryAddUnexpectedEqualsGreaterThanToken(callSignature);
var blockOrSemicolonToken = parseBlockEvenWithNoOpenBrace || isBlock() ? parseBlock(parseBlockEvenWithNoOpenBrace, true) : eatExplicitOrAutomaticSemicolon(false);
return new TypeScript.MemberFunctionDeclarationSyntax(parseNodeData, modifiers, propertyName, callSignature, blockOrSemicolonToken);
}
function parseMemberVariableDeclaration(modifiers, propertyName) {
return new TypeScript.MemberVariableDeclarationSyntax(parseNodeData, modifiers, new TypeScript.VariableDeclaratorSyntax(parseNodeData, propertyName, parseOptionalTypeAnnotation(false), isEqualsValueClause(false) ? allowInAnd(parseEqualsValueClause) : undefined), eatExplicitOrAutomaticSemicolon(false));
}
function isIndexMemberDeclaration(modifierCount) {
return isIndexSignature(modifierCount);
}
function parseIndexMemberDeclaration() {
return new TypeScript.IndexMemberDeclarationSyntax(parseNodeData, parseModifiers(), parseIndexSignature(), eatExplicitOrAutomaticSemicolon(false));
}
function tryAddUnexpectedEqualsGreaterThanToken(callSignature) {
var token0 = currentToken();
var hasEqualsGreaterThanToken = token0.kind === 87 /* EqualsGreaterThanToken */;
if (hasEqualsGreaterThanToken) {
var _lastToken = TypeScript.lastToken(callSignature);
if (_lastToken && _lastToken.fullWidth() > 0) {
var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token0, source.text), TypeScript.width(token0), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(72 /* OpenBraceToken */)]);
addDiagnostic(diagnostic);
skipToken(token0);
return true;
}
}
return false;
}
function isFunctionDeclaration(modifierCount) {
return peekToken(modifierCount).kind === 29 /* FunctionKeyword */;
}
function parseFunctionDeclaration() {
var modifiers = parseModifiers();
var functionKeyword = eatToken(29 /* FunctionKeyword */);
var identifier = eatIdentifierToken();
var callSignature = parseCallSignature(false);
var parseBlockEvenWithNoOpenBrace = tryAddUnexpectedEqualsGreaterThanToken(callSignature);
var blockOrSemicolonToken = parseBlockEvenWithNoOpenBrace || isBlock() ? parseBlock(parseBlockEvenWithNoOpenBrace, true) : eatExplicitOrAutomaticSemicolon(false);
return new TypeScript.FunctionDeclarationSyntax(parseNodeData, modifiers, functionKeyword, identifier, callSignature, blockOrSemicolonToken);
}
function parseModuleName() {
return currentToken().kind === 12 /* StringLiteral */ ? eatToken(12 /* StringLiteral */) : parseName(false);
}
function parseModuleDeclaration() {
var openBraceToken;
return new TypeScript.ModuleDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(67 /* ModuleKeyword */), parseModuleName(), openBraceToken = eatToken(72 /* OpenBraceToken */), openBraceToken.fullWidth() > 0 ? parseSyntaxList(2 /* ModuleDeclaration_ModuleElements */) : [], eatToken(73 /* CloseBraceToken */));
}
function parseInterfaceDeclaration() {
return new TypeScript.InterfaceDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(54 /* InterfaceKeyword */), eatIdentifierToken(), tryParseTypeParameterList(false), parseHeritageClauses(), parseObjectType());
}
function parseObjectType() {
var openBraceToken;
return new TypeScript.ObjectTypeSyntax(parseNodeData, openBraceToken = eatToken(72 /* OpenBraceToken */), openBraceToken.fullWidth() > 0 ? parseSeparatedSyntaxList(9 /* ObjectType_TypeMembers */) : [], eatToken(73 /* CloseBraceToken */));
}
function parseTupleType(currentToken) {
return new TypeScript.TupleTypeSyntax(parseNodeData, consumeToken(currentToken), parseSeparatedSyntaxList(20 /* TupleType_Types */), eatToken(77 /* CloseBracketToken */));
}
function isTypeMember(inErrorRecovery) {
if (TypeScript.SyntaxUtilities.isTypeMember(currentNode())) {
return true;
}
return isCallSignature(0) || isConstructSignature() || isIndexSignature(0) || isMethodOrPropertySignature(inErrorRecovery);
}
function isMethodOrPropertySignature(inErrorRecovery) {
var _currentToken = currentToken();
if (isModifier(_currentToken, 0)) {
var token1 = peekToken(1);
if (!TypeScript.existsNewLineBetweenTokens(_currentToken, token1, source.text) && isPropertyNameToken(token1, inErrorRecovery)) {
return false;
}
}
return isPropertyName(0, inErrorRecovery);
}
function tryParseTypeMember(inErrorRecovery) {
var node = currentNode();
if (TypeScript.SyntaxUtilities.isTypeMember(node)) {
consumeNode(node);
return node;
}
if (isCallSignature(0)) {
return parseCallSignature(false);
}
else if (isConstructSignature()) {
return parseConstructSignature();
}
else if (isIndexSignature(0)) {
return parseIndexSignature();
}
else if (isMethodOrPropertySignature(inErrorRecovery)) {
var propertyName = parsePropertyName();
var questionToken = tryEatToken(107 /* QuestionToken */);
if (isCallSignature(0)) {
return parseMethodSignature(propertyName, questionToken);
}
else {
return parsePropertySignature(propertyName, questionToken);
}
}
else {
return undefined;
}
}
function parseConstructSignature() {
return new TypeScript.ConstructSignatureSyntax(parseNodeData, eatToken(33 /* NewKeyword */), parseCallSignature(false));
}
function parseIndexSignature() {
return new TypeScript.IndexSignatureSyntax(parseNodeData, eatToken(76 /* OpenBracketToken */), parseSeparatedSyntaxList(17 /* IndexSignature_Parameters */), eatToken(77 /* CloseBracketToken */), parseOptionalTypeAnnotation(false));
}
function parseMethodSignature(propertyName, questionToken) {
return new TypeScript.MethodSignatureSyntax(parseNodeData, propertyName, questionToken, parseCallSignature(false));
}
function parsePropertySignature(propertyName, questionToken) {
return new TypeScript.PropertySignatureSyntax(parseNodeData, propertyName, questionToken, parseOptionalTypeAnnotation(false));
}
function isCallSignature(peekIndex) {
var tokenKind = peekToken(peekIndex).kind;
return tokenKind === 74 /* OpenParenToken */ || tokenKind === 82 /* LessThanToken */;
}
function isConstructSignature() {
if (currentToken().kind !== 33 /* NewKeyword */) {
return false;
}
return isCallSignature(1);
}
function isIndexSignature(peekIndex) {
if (peekToken(peekIndex).kind === 76 /* OpenBracketToken */) {
var token1 = peekToken(peekIndex + 1);
if (token1.kind === 79 /* DotDotDotToken */ || token1.kind === 77 /* CloseBracketToken */) {
return true;
}
if (isIdentifier(token1)) {
var token2 = peekToken(peekIndex + 2);
if (token2.kind === 108 /* ColonToken */ || token2.kind === 81 /* CommaToken */) {
return true;
}
}
if (token1.kind === 59 /* PublicKeyword */ || token1.kind === 57 /* PrivateKeyword */) {
var token2 = peekToken(peekIndex + 2);
return isIdentifier(token2);
}
}
return false;
}
function isHeritageClause() {
var tokenKind = currentToken().kind;
return tokenKind === 50 /* ExtendsKeyword */ || tokenKind === 53 /* ImplementsKeyword */;
}
function isNotHeritageClauseTypeName() {
var tokenKind = currentToken().kind;
if (tokenKind === 53 /* ImplementsKeyword */ || tokenKind === 50 /* ExtendsKeyword */) {
return isIdentifier(peekToken(1));
}
return false;
}
function isHeritageClauseTypeName() {
if (isIdentifier(currentToken())) {
return !isNotHeritageClauseTypeName();
}
return false;
}
function tryParseHeritageClause() {
var extendsOrImplementsKeyword = currentToken();
var tokenKind = extendsOrImplementsKeyword.kind;
if (tokenKind !== 50 /* ExtendsKeyword */ && tokenKind !== 53 /* ImplementsKeyword */) {
return undefined;
}
return new TypeScript.HeritageClauseSyntax(parseNodeData, consumeToken(extendsOrImplementsKeyword), parseSeparatedSyntaxList(11 /* HeritageClause_TypeNameList */));
}
function isInterfaceEnumClassModuleImportOrExport(modifierCount, _currentToken) {
if (modifierCount) {
switch (peekToken(modifierCount).kind) {
case 51 /* ImportKeyword */:
case 67 /* ModuleKeyword */:
case 54 /* InterfaceKeyword */:
case 46 /* ClassKeyword */:
case 48 /* EnumKeyword */:
return true;
}
}
_currentToken = _currentToken || currentToken();
var nextToken = peekToken(1);
switch (_currentToken.kind) {
case 67 /* ModuleKeyword */:
return isIdentifier(nextToken) || nextToken.kind === 12 /* StringLiteral */;
case 51 /* ImportKeyword */:
case 46 /* ClassKeyword */:
case 48 /* EnumKeyword */:
case 54 /* InterfaceKeyword */:
return isIdentifier(nextToken);
case 49 /* ExportKeyword */:
return nextToken.kind === 109 /* EqualsToken */;
}
return false;
}
function isStatement(modifierCount, inErrorRecovery) {
if (TypeScript.SyntaxUtilities.isStatement(currentNode())) {
return true;
}
var _currentToken = currentToken();
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 59 /* PublicKeyword */:
case 57 /* PrivateKeyword */:
case 58 /* ProtectedKeyword */:
case 60 /* StaticKeyword */:
var token1 = peekToken(1);
if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) {
return false;
}
break;
case 30 /* IfKeyword */:
case 72 /* OpenBraceToken */:
case 35 /* ReturnKeyword */:
case 36 /* SwitchKeyword */:
case 38 /* ThrowKeyword */:
case 17 /* BreakKeyword */:
case 20 /* ContinueKeyword */:
case 28 /* ForKeyword */:
case 44 /* WhileKeyword */:
case 45 /* WithKeyword */:
case 24 /* DoKeyword */:
case 40 /* TryKeyword */:
case 21 /* DebuggerKeyword */:
return true;
}
if (isInterfaceEnumClassModuleImportOrExport(modifierCount, _currentToken)) {
return false;
}
return isLabeledStatement(_currentToken) || isVariableStatement(modifierCount) || isFunctionDeclaration(modifierCount) || isEmptyStatement(_currentToken, inErrorRecovery) || isExpressionStatement(_currentToken);
}
function parseStatement(inErrorRecovery) {
return tryParseStatement(inErrorRecovery) || parseExpressionStatement();
}
function tryParseStatement(inErrorRecovery) {
var node = currentNode();
if (TypeScript.SyntaxUtilities.isStatement(node)) {
consumeNode(node);
return node;
}
var _currentToken = currentToken();
var currentTokenKind = _currentToken.kind;
return tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount(), inErrorRecovery);
}
function tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount, inErrorRecovery) {
switch (currentTokenKind) {
case 59 /* PublicKeyword */:
case 57 /* PrivateKeyword */:
case 58 /* ProtectedKeyword */:
case 60 /* StaticKeyword */:
if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(peekToken(1))) {
return undefined;
}
else {
break;
}
case 30 /* IfKeyword */: return parseIfStatement(_currentToken);
case 72 /* OpenBraceToken */: return parseBlock(false, false);
case 35 /* ReturnKeyword */: return parseReturnStatement(_currentToken);
case 36 /* SwitchKeyword */: return parseSwitchStatement(_currentToken);
case 38 /* ThrowKeyword */: return parseThrowStatement(_currentToken);
case 17 /* BreakKeyword */: return parseBreakStatement(_currentToken);
case 20 /* ContinueKeyword */: return parseContinueStatement(_currentToken);
case 28 /* ForKeyword */: return parseForOrForInStatement(_currentToken);
case 44 /* WhileKeyword */: return parseWhileStatement(_currentToken);
case 45 /* WithKeyword */: return parseWithStatement(_currentToken);
case 24 /* DoKeyword */: return parseDoStatement(_currentToken);
case 40 /* TryKeyword */: return parseTryStatement(_currentToken);
case 21 /* DebuggerKeyword */: return parseDebuggerStatement(_currentToken);
}
if (isInterfaceEnumClassModuleImportOrExport(modifierCount, _currentToken)) {
return undefined;
}
else if (isVariableStatement(modifierCount)) {
return parseVariableStatement();
}
else if (isLabeledStatement(_currentToken)) {
return parseLabeledStatement(_currentToken);
}
else if (isFunctionDeclaration(modifierCount)) {
return parseFunctionDeclaration();
}
else if (isEmptyStatement(_currentToken, inErrorRecovery)) {
return parseEmptyStatement(_currentToken);
}
else if (isExpressionStatement(_currentToken)) {
return parseExpressionStatement();
}
else {
return undefined;
}
}
function parseDebuggerStatement(debuggerKeyword) {
return new TypeScript.DebuggerStatementSyntax(parseNodeData, consumeToken(debuggerKeyword), eatExplicitOrAutomaticSemicolon(false));
}
function parseDoStatement(doKeyword) {
return new TypeScript.DoStatementSyntax(parseNodeData, consumeToken(doKeyword), parseStatement(false), eatToken(44 /* WhileKeyword */), eatToken(74 /* OpenParenToken */), allowInAnd(parseExpression), eatToken(75 /* CloseParenToken */), eatExplicitOrAutomaticSemicolon(true));
}
function isLabeledStatement(currentToken) {
return isIdentifier(currentToken) && peekToken(1).kind === 108 /* ColonToken */;
}
function parseLabeledStatement(identifierToken) {
return new TypeScript.LabeledStatementSyntax(parseNodeData, consumeToken(identifierToken), eatToken(108 /* ColonToken */), parseStatement(false));
}
function parseTryStatement(tryKeyword) {
var tryKeyword = consumeToken(tryKeyword);
var savedListParsingState = listParsingState;
listParsingState |= (1 << 6 /* TryBlock_Statements */);
var block = parseBlock(false, false);
listParsingState = savedListParsingState;
var catchClause = undefined;
if (currentToken().kind === 19 /* CatchKeyword */) {
catchClause = parseCatchClause();
}
var finallyClause = undefined;
if (!catchClause || currentToken().kind === 27 /* FinallyKeyword */) {
finallyClause = parseFinallyClause();
}
return new TypeScript.TryStatementSyntax(parseNodeData, tryKeyword, block, catchClause, finallyClause);
}
function parseCatchClauseBlock() {
var savedListParsingState = listParsingState;
listParsingState |= (1 << 7 /* CatchBlock_Statements */);
var block = parseBlock(false, false);
listParsingState = savedListParsingState;
return block;
}
function parseCatchClause() {
return new TypeScript.CatchClauseSyntax(parseNodeData, eatToken(19 /* CatchKeyword */), eatToken(74 /* OpenParenToken */), eatIdentifierToken(), parseOptionalTypeAnnotation(false), eatToken(75 /* CloseParenToken */), parseCatchClauseBlock());
}
function parseFinallyClause() {
return new TypeScript.FinallyClauseSyntax(parseNodeData, eatToken(27 /* FinallyKeyword */), parseBlock(false, false));
}
function parseWithStatement(withKeyword) {
return new TypeScript.WithStatementSyntax(parseNodeData, consumeToken(withKeyword), eatToken(74 /* OpenParenToken */), allowInAnd(parseExpression), eatToken(75 /* CloseParenToken */), parseStatement(false));
}
function parseWhileStatement(whileKeyword) {
return new TypeScript.WhileStatementSyntax(parseNodeData, consumeToken(whileKeyword), eatToken(74 /* OpenParenToken */), allowInAnd(parseExpression), eatToken(75 /* CloseParenToken */), parseStatement(false));
}
function isEmptyStatement(currentToken, inErrorRecovery) {
if (inErrorRecovery) {
return false;
}
return currentToken.kind === 80 /* SemicolonToken */;
}
function parseEmptyStatement(semicolonToken) {
return new TypeScript.EmptyStatementSyntax(parseNodeData, consumeToken(semicolonToken));
}
function parseForOrForInStatement(forKeyword) {
forKeyword = consumeToken(forKeyword);
var openParenToken = eatToken(74 /* OpenParenToken */);
var _currentToken = currentToken();
var tokenKind = _currentToken.kind;
var initializer = tokenKind === 80 /* SemicolonToken */ ? undefined : tokenKind === 42 /* VarKeyword */ ? disallowInAnd(parseVariableDeclaration) : disallowInAnd(parseExpression);
if (initializer !== undefined && currentToken().kind === 31 /* InKeyword */) {
return new TypeScript.ForInStatementSyntax(parseNodeData, forKeyword, openParenToken, initializer, eatToken(31 /* InKeyword */), allowInAnd(parseExpression), eatToken(75 /* CloseParenToken */), parseStatement(false));
}
else {
return new TypeScript.ForStatementSyntax(parseNodeData, forKeyword, openParenToken, initializer, eatToken(80 /* SemicolonToken */), tryParseForStatementCondition(), eatToken(80 /* SemicolonToken */), tryParseForStatementIncrementor(), eatToken(75 /* CloseParenToken */), parseStatement(false));
}
}
function tryParseForStatementCondition() {
var tokenKind = currentToken().kind;
if (tokenKind !== 80 /* SemicolonToken */ && tokenKind !== 75 /* CloseParenToken */ && tokenKind !== 8 /* EndOfFileToken */) {
return allowInAnd(parseExpression);
}
return undefined;
}
function tryParseForStatementIncrementor() {
var tokenKind = currentToken().kind;
if (tokenKind !== 75 /* CloseParenToken */ && tokenKind !== 8 /* EndOfFileToken */) {
return allowInAnd(parseExpression);
}
return undefined;
}
function tryEatBreakOrContinueLabel() {
var identifier = undefined;
if (!canEatExplicitOrAutomaticSemicolon(false)) {
if (isIdentifier(currentToken())) {
return eatIdentifierToken();
}
}
return undefined;
}
function parseBreakStatement(breakKeyword) {
return new TypeScript.BreakStatementSyntax(parseNodeData, consumeToken(breakKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(false));
}
function parseContinueStatement(continueKeyword) {
return new TypeScript.ContinueStatementSyntax(parseNodeData, consumeToken(continueKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(false));
}
function parseSwitchExpression(openParenToken) {
return openParenToken.fullWidth() === 0 && currentToken().kind === 72 /* OpenBraceToken */ ? eatIdentifierToken() : allowInAnd(parseExpression);
}
function parseSwitchStatement(switchKeyword) {
var openParenToken;
var openBraceToken;
return new TypeScript.SwitchStatementSyntax(parseNodeData, consumeToken(switchKeyword), openParenToken = eatToken(74 /* OpenParenToken */), parseSwitchExpression(openParenToken), eatToken(75 /* CloseParenToken */), openBraceToken = eatToken(72 /* OpenBraceToken */), openBraceToken.fullWidth() > 0 ? parseSyntaxList(3 /* SwitchStatement_SwitchClauses */) : [], eatToken(73 /* CloseBraceToken */));
}
function isSwitchClause() {
if (TypeScript.SyntaxUtilities.isSwitchClause(currentNode())) {
return true;
}
var currentTokenKind = currentToken().kind;
return currentTokenKind === 18 /* CaseKeyword */ || currentTokenKind === 22 /* DefaultKeyword */;
}
function tryParseSwitchClause() {
var node = currentNode();
if (TypeScript.SyntaxUtilities.isSwitchClause(node)) {
consumeNode(node);
return node;
}
var _currentToken = currentToken();
var kind = _currentToken.kind;
if (kind === 18 /* CaseKeyword */) {
return parseCaseSwitchClause(_currentToken);
}
else if (kind === 22 /* DefaultKeyword */) {
return parseDefaultSwitchClause(_currentToken);
}
else {
return undefined;
}
}
function parseCaseSwitchClause(caseKeyword) {
return new TypeScript.CaseSwitchClauseSyntax(parseNodeData, consumeToken(caseKeyword), allowInAnd(parseExpression), eatToken(108 /* ColonToken */), parseSyntaxList(4 /* SwitchClause_Statements */));
}
function parseDefaultSwitchClause(defaultKeyword) {
return new TypeScript.DefaultSwitchClauseSyntax(parseNodeData, consumeToken(defaultKeyword), eatToken(108 /* ColonToken */), parseSyntaxList(4 /* SwitchClause_Statements */));
}
function parseThrowStatementExpression() {
return canEatExplicitOrAutomaticSemicolon(false) ? createMissingToken(9 /* IdentifierName */, undefined) : allowInAnd(parseExpression);
}
function parseThrowStatement(throwKeyword) {
return new TypeScript.ThrowStatementSyntax(parseNodeData, consumeToken(throwKeyword), parseThrowStatementExpression(), eatExplicitOrAutomaticSemicolon(false));
}
function tryParseReturnStatementExpression() {
return !canEatExplicitOrAutomaticSemicolon(false) ? allowInAnd(parseExpression) : undefined;
}
function parseReturnStatement(returnKeyword) {
return new TypeScript.ReturnStatementSyntax(parseNodeData, consumeToken(returnKeyword), tryParseReturnStatementExpression(), eatExplicitOrAutomaticSemicolon(false));
}
function isExpressionStatement(currentToken) {
var tokenKind = currentToken.kind;
return tokenKind !== 72 /* OpenBraceToken */ && tokenKind !== 29 /* FunctionKeyword */ && isExpression(currentToken);
}
function isAssignmentOrOmittedExpression() {
var _currentToken = currentToken();
return _currentToken.kind === 81 /* CommaToken */ || isExpression(_currentToken);
}
function tryParseAssignmentOrOmittedExpression() {
if (currentToken().kind === 81 /* CommaToken */) {
return new TypeScript.OmittedExpressionSyntax(parseNodeData);
}
return allowInAnd(tryParseAssignmentExpressionOrHigher_NoForce);
}
function isExpression(currentToken) {
switch (currentToken.kind) {
case 11 /* NumericLiteral */:
case 12 /* StringLiteral */:
case 10 /* RegularExpressionLiteral */:
case 13 /* NoSubstitutionTemplateToken */:
case 14 /* TemplateStartToken */:
case 76 /* OpenBracketToken */:
case 74 /* OpenParenToken */:
case 82 /* LessThanToken */:
case 95 /* PlusPlusToken */:
case 96 /* MinusMinusToken */:
case 91 /* PlusToken */:
case 92 /* MinusToken */:
case 104 /* TildeToken */:
case 103 /* ExclamationToken */:
case 72 /* OpenBraceToken */:
case 87 /* EqualsGreaterThanToken */:
case 120 /* SlashToken */:
case 121 /* SlashEqualsToken */:
case 52 /* SuperKeyword */:
case 37 /* ThisKeyword */:
case 39 /* TrueKeyword */:
case 26 /* FalseKeyword */:
case 34 /* NullKeyword */:
case 33 /* NewKeyword */:
case 23 /* DeleteKeyword */:
case 43 /* VoidKeyword */:
case 41 /* TypeOfKeyword */:
case 29 /* FunctionKeyword */:
return true;
}
return isIdentifier(currentToken);
}
function parseExpressionStatement() {
return new TypeScript.ExpressionStatementSyntax(parseNodeData, allowInAnd(parseExpression), eatExplicitOrAutomaticSemicolon(false));
}
function parseIfStatement(ifKeyword) {
return new TypeScript.IfStatementSyntax(parseNodeData, consumeToken(ifKeyword), eatToken(74 /* OpenParenToken */), allowInAnd(parseExpression), eatToken(75 /* CloseParenToken */), parseStatement(false), parseOptionalElseClause());
}
function parseOptionalElseClause() {
return currentToken().kind === 25 /* ElseKeyword */ ? parseElseClause() : undefined;
}
function parseElseClause() {
return new TypeScript.ElseClauseSyntax(parseNodeData, eatToken(25 /* ElseKeyword */), parseStatement(false));
}
function isVariableStatement(modifierCount) {
return peekToken(modifierCount).kind === 42 /* VarKeyword */;
}
function parseVariableStatement() {
return new TypeScript.VariableStatementSyntax(parseNodeData, parseModifiers(), allowInAnd(parseVariableDeclaration), eatExplicitOrAutomaticSemicolon(false));
}
function parseVariableDeclaration() {
return new TypeScript.VariableDeclarationSyntax(parseNodeData, eatToken(42 /* VarKeyword */), parseSeparatedSyntaxList(12 /* VariableDeclaration_VariableDeclarators */));
}
function isVariableDeclarator() {
var node = currentNode();
if (node && node.kind === 191 /* VariableDeclarator */) {
return true;
}
return isIdentifier(currentToken());
}
function canReuseVariableDeclaratorNode(node) {
if (!node || node.kind !== 191 /* VariableDeclarator */) {
return false;
}
var variableDeclarator = node;
return variableDeclarator.equalsValueClause === undefined;
}
function tryParseVariableDeclarator() {
var node = currentNode();
if (canReuseVariableDeclaratorNode(node)) {
consumeNode(node);
return node;
}
if (!isIdentifier(currentToken())) {
return undefined;
}
var propertyName = eatIdentifierToken();
var equalsValueClause = undefined;
var typeAnnotation = undefined;
if (TypeScript.fullWidth(propertyName) > 0) {
typeAnnotation = parseOptionalTypeAnnotation(false);
if (isEqualsValueClause(false)) {
equalsValueClause = parseEqualsValueClause();
}
}
return new TypeScript.VariableDeclaratorSyntax(parseNodeData, propertyName, typeAnnotation, equalsValueClause);
}
function isEqualsValueClause(inParameter) {
var token0 = currentToken();
if (token0.kind === 109 /* EqualsToken */) {
return true;
}
if (!isOnDifferentLineThanPreviousToken(token0)) {
var tokenKind = token0.kind;
if (tokenKind === 87 /* EqualsGreaterThanToken */) {
return false;
}
if (tokenKind === 72 /* OpenBraceToken */ && inParameter) {
return false;
}
return isExpression(token0);
}
return false;
}
function parseEqualsValueClause() {
return new TypeScript.EqualsValueClauseSyntax(parseNodeData, eatToken(109 /* EqualsToken */), tryParseAssignmentExpressionOrHigher(true));
}
function parseExpression() {
var leftOperand = tryParseAssignmentExpressionOrHigher(true);
while (true) {
var _currentToken = currentToken();
if (_currentToken.kind !== 81 /* CommaToken */) {
break;
}
leftOperand = new TypeScript.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(_currentToken), tryParseAssignmentExpressionOrHigher(true));
}
return leftOperand;
}
function tryParseAssignmentExpressionOrHigher_NoForce() {
return tryParseAssignmentExpressionOrHigher(false);
}
function tryParseAssignmentExpressionOrHigher_Force() {
return tryParseAssignmentExpressionOrHigher(true);
}
function tryParseAssignmentExpressionOrHigher(force) {
var _currentToken = currentToken();
var arrowFunction = tryParseAnyArrowFunctionExpression(_currentToken);
if (arrowFunction) {
return arrowFunction;
}
var leftOperand = tryParseBinaryExpressionOrHigher(_currentToken, force, 1 /* Lowest */);
if (leftOperand === undefined) {
return undefined;
}
if (TypeScript.SyntaxUtilities.isLeftHandSizeExpression(leftOperand)) {
var operatorToken = currentOperatorToken();
if (TypeScript.SyntaxFacts.isAssignmentOperatorToken(operatorToken.kind)) {
return new TypeScript.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), tryParseAssignmentExpressionOrHigher(true));
}
}
return parseConditionalExpressionRest(leftOperand);
}
function tryParseAnyArrowFunctionExpression(_currentToken) {
return isSimpleArrowFunctionExpression(_currentToken) ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression();
}
function tryParseUnaryExpressionOrHigher(_currentToken, force) {
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 91 /* PlusToken */:
case 92 /* MinusToken */:
case 104 /* TildeToken */:
case 103 /* ExclamationToken */:
case 95 /* PlusPlusToken */:
case 96 /* MinusMinusToken */:
return new TypeScript.PrefixUnaryExpressionSyntax(parseNodeData, consumeToken(_currentToken), tryParseUnaryExpressionOrHigher(currentToken(), true));
case 41 /* TypeOfKeyword */: return parseTypeOfExpression(_currentToken);
case 43 /* VoidKeyword */: return parseVoidExpression(_currentToken);
case 23 /* DeleteKeyword */: return parseDeleteExpression(_currentToken);
case 82 /* LessThanToken */: return parseCastExpression(_currentToken);
default:
return tryParsePostfixExpressionOrHigher(_currentToken, force);
}
}
function tryParseBinaryExpressionOrHigher(_currentToken, force, precedence) {
var leftOperand = tryParseUnaryExpressionOrHigher(_currentToken, force);
if (leftOperand === undefined) {
return undefined;
}
return parseBinaryExpressionRest(precedence, leftOperand);
}
function parseConditionalExpressionRest(leftOperand) {
var _currentToken = currentToken();
if (_currentToken.kind !== 107 /* QuestionToken */) {
return leftOperand;
}
return new TypeScript.ConditionalExpressionSyntax(parseNodeData, leftOperand, consumeToken(_currentToken), allowInAnd(tryParseAssignmentExpressionOrHigher_Force), eatToken(108 /* ColonToken */), tryParseAssignmentExpressionOrHigher(true));
}
function parseBinaryExpressionRest(precedence, leftOperand) {
while (true) {
var operatorToken = currentOperatorToken();
var tokenKind = operatorToken.kind;
if (!TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(tokenKind) || tokenKind === 81 /* CommaToken */ || TypeScript.SyntaxFacts.isAssignmentOperatorToken(tokenKind)) {
break;
}
if (tokenKind === 31 /* InKeyword */ && disallowIn) {
break;
}
var newPrecedence = getBinaryExpressionPrecedence(tokenKind);
if (newPrecedence <= precedence) {
break;
}
leftOperand = new TypeScript.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), tryParseBinaryExpressionOrHigher(currentToken(), true, newPrecedence));
}
return leftOperand;
}
function currentOperatorToken() {
var token0 = currentToken();
if (token0.kind === 83 /* GreaterThanToken */) {
return currentContextualToken();
}
return token0;
}
function tryParseMemberExpressionOrHigher(_currentToken, force, inObjectCreation) {
var expression = tryParsePrimaryExpression(_currentToken, force);
if (expression === undefined) {
return undefined;
}
return parseMemberExpressionRest(expression, inObjectCreation);
}
function parseCallExpressionRest(expression) {
while (true) {
var _currentToken = currentToken();
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 74 /* OpenParenToken */:
expression = new TypeScript.InvocationExpressionSyntax(parseNodeData, expression, parseArgumentList(undefined, _currentToken));
continue;
case 82 /* LessThanToken */:
var argumentList = tryParseArgumentList();
if (argumentList === undefined) {
break;
}
expression = new TypeScript.InvocationExpressionSyntax(parseNodeData, expression, argumentList);
continue;
case 76 /* OpenBracketToken */:
expression = parseElementAccessExpression(expression, _currentToken, false);
continue;
case 78 /* DotToken */:
expression = new TypeScript.MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken());
continue;
case 13 /* NoSubstitutionTemplateToken */:
case 14 /* TemplateStartToken */:
expression = new TypeScript.TemplateAccessExpressionSyntax(parseNodeData, expression, parseTemplateExpression(_currentToken));
continue;
}
return expression;
}
}
function parseMemberExpressionRest(expression, inObjectCreation) {
while (true) {
var _currentToken = currentToken();
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 76 /* OpenBracketToken */:
expression = parseElementAccessExpression(expression, _currentToken, inObjectCreation);
continue;
case 78 /* DotToken */:
expression = new TypeScript.MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken());
continue;
case 13 /* NoSubstitutionTemplateToken */:
case 14 /* TemplateStartToken */:
expression = new TypeScript.TemplateAccessExpressionSyntax(parseNodeData, expression, parseTemplateExpression(_currentToken));
continue;
}
return expression;
}
}
function tryParseLeftHandSideExpressionOrHigher(_currentToken, force) {
var expression = undefined;
if (_currentToken.kind === 52 /* SuperKeyword */) {
expression = parseSuperExpression(_currentToken);
}
else {
expression = tryParseMemberExpressionOrHigher(_currentToken, force, false);
if (expression === undefined) {
return undefined;
}
}
return parseCallExpressionRest(expression);
}
function parseSuperExpression(superToken) {
var expression = consumeToken(superToken);
var currentTokenKind = currentToken().kind;
return currentTokenKind === 74 /* OpenParenToken */ || currentTokenKind === 78 /* DotToken */ ? expression : new TypeScript.MemberAccessExpressionSyntax(parseNodeData, expression, eatToken(78 /* DotToken */), eatIdentifierNameToken());
}
function tryParsePostfixExpressionOrHigher(_currentToken, force) {
var expression = tryParseLeftHandSideExpressionOrHigher(_currentToken, force);
if (expression === undefined) {
return undefined;
}
var _currentToken = currentToken();
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 95 /* PlusPlusToken */:
case 96 /* MinusMinusToken */:
if (isOnDifferentLineThanPreviousToken(_currentToken)) {
break;
}
return new TypeScript.PostfixUnaryExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken));
}
return expression;
}
function tryParseGenericArgumentList() {
var rewindPoint = getRewindPoint();
var typeArgumentList = tryParseTypeArgumentList(true);
var token0 = currentToken();
var tokenKind = token0.kind;
var isOpenParen = tokenKind === 74 /* OpenParenToken */;
var isDot = tokenKind === 78 /* DotToken */;
var isOpenParenOrDot = isOpenParen || isDot;
var argumentList = undefined;
if (!typeArgumentList || !isOpenParenOrDot) {
rewind(rewindPoint);
releaseRewindPoint(rewindPoint);
return undefined;
}
else {
TypeScript.Debug.assert(typeArgumentList && isOpenParenOrDot);
releaseRewindPoint(rewindPoint);
if (isDot) {
var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token0, source.text), TypeScript.width(token0), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, undefined);
addDiagnostic(diagnostic);
return new TypeScript.ArgumentListSyntax(parseNodeData, typeArgumentList, TypeScript.Syntax.emptyToken(74 /* OpenParenToken */), [], TypeScript.Syntax.emptyToken(75 /* CloseParenToken */));
}
else {
TypeScript.Debug.assert(token0.kind === 74 /* OpenParenToken */);
return parseArgumentList(typeArgumentList, token0);
}
}
}
function tryParseArgumentList() {
var _currentToken = currentToken();
var tokenKind = _currentToken.kind;
if (tokenKind === 82 /* LessThanToken */) {
return tryParseGenericArgumentList();
}
if (tokenKind === 74 /* OpenParenToken */) {
return parseArgumentList(undefined, _currentToken);
}
return undefined;
}
function parseArgumentList(typeArgumentList, openParenToken) {
TypeScript.Debug.assert(openParenToken.kind === 74 /* OpenParenToken */ && openParenToken.fullWidth() > 0);
return new TypeScript.ArgumentListSyntax(parseNodeData, typeArgumentList, consumeToken(openParenToken), parseSeparatedSyntaxList(13 /* ArgumentList_AssignmentExpressions */), eatToken(75 /* CloseParenToken */));
}
function tryParseArgumentListExpression() {
var force = currentToken().kind === 81 /* CommaToken */;
return allowInAnd(force ? tryParseAssignmentExpressionOrHigher_Force : tryParseAssignmentExpressionOrHigher_NoForce);
}
function parseElementAccessArgumentExpression(openBracketToken, inObjectCreation) {
if (inObjectCreation && currentToken().kind === 77 /* CloseBracketToken */) {
var errorStart = TypeScript.start(openBracketToken, source.text);
var errorEnd = TypeScript.fullEnd(currentToken());
var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), errorStart, errorEnd - errorStart, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, undefined);
addDiagnostic(diagnostic);
return TypeScript.Syntax.emptyToken(9 /* IdentifierName */);
}
else {
return allowInAnd(parseExpression);
}
}
function parseElementAccessExpression(expression, openBracketToken, inObjectCreation) {
return new TypeScript.ElementAccessExpressionSyntax(parseNodeData, expression, consumeToken(openBracketToken), parseElementAccessArgumentExpression(openBracketToken, inObjectCreation), eatToken(77 /* CloseBracketToken */));
}
function tryParsePrimaryExpression(_currentToken, force) {
if (isIdentifier(_currentToken)) {
return eatIdentifierToken();
}
var currentTokenKind = _currentToken.kind;
switch (currentTokenKind) {
case 37 /* ThisKeyword */:
case 39 /* TrueKeyword */:
case 26 /* FalseKeyword */:
case 34 /* NullKeyword */:
case 11 /* NumericLiteral */:
case 10 /* RegularExpressionLiteral */:
case 12 /* StringLiteral */:
return consumeToken(_currentToken);
case 29 /* FunctionKeyword */: return parseFunctionExpression(_currentToken);
case 76 /* OpenBracketToken */: return parseArrayLiteralExpression(_currentToken);
case 72 /* OpenBraceToken */: return parseObjectLiteralExpression(_currentToken);
case 74 /* OpenParenToken */: return parseParenthesizedExpression(_currentToken);
case 33 /* NewKeyword */: return parseObjectCreationExpression(_currentToken);
case 13 /* NoSubstitutionTemplateToken */:
case 14 /* TemplateStartToken */:
return parseTemplateExpression(_currentToken);
case 120 /* SlashToken */:
case 121 /* SlashEqualsToken */:
var result = tryReparseDivideAsRegularExpression();
return result || eatIdentifierToken(TypeScript.DiagnosticCode.Expression_expected);
}
if (!force) {
return undefined;
}
return eatIdentifierToken(TypeScript.DiagnosticCode.Expression_expected);
}
function tryReparseDivideAsRegularExpression() {
var currentToken = currentContextualToken();
var tokenKind = currentToken.kind;
if (tokenKind === 120 /* SlashToken */ || tokenKind === 121 /* SlashEqualsToken */) {
return undefined;
}
else if (tokenKind === 10 /* RegularExpressionLiteral */) {
return consumeToken(currentToken);
}
else {
throw TypeScript.Errors.invalidOperation();
}
}
function parseTypeOfExpression(typeOfKeyword) {
return new TypeScript.TypeOfExpressionSyntax(parseNodeData, consumeToken(typeOfKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true));
}
function parseDeleteExpression(deleteKeyword) {
return new TypeScript.DeleteExpressionSyntax(parseNodeData, consumeToken(deleteKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true));
}
function parseVoidExpression(voidKeyword) {
return new TypeScript.VoidExpressionSyntax(parseNodeData, consumeToken(voidKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true));
}
function parseFunctionExpression(functionKeyword) {
return new TypeScript.FunctionExpressionSyntax(parseNodeData, consumeToken(functionKeyword), eatOptionalIdentifierToken(), parseCallSignature(false), parseBlock(false, true));
}
function parseObjectCreationExpression(newKeyword) {
return new TypeScript.ObjectCreationExpressionSyntax(parseNodeData, consumeToken(newKeyword), tryParseMemberExpressionOrHigher(currentToken(), true, true), tryParseArgumentList());
}
function parseTemplateExpression(startToken) {
startToken = consumeToken(startToken);
if (startToken.kind === 13 /* NoSubstitutionTemplateToken */) {
return startToken;
}
var templateClauses = [];
do {
templateClauses.push(parseTemplateClause());
} while (templateClauses[templateClauses.length - 1].templateMiddleOrEndToken.kind === 15 /* TemplateMiddleToken */);
return new TypeScript.TemplateExpressionSyntax(parseNodeData, startToken, TypeScript.Syntax.list(templateClauses));
}
function parseTemplateClause() {
var expression = allowInAnd(parseExpression);
var token = currentToken();
if (token.kind === 73 /* CloseBraceToken */) {
token = currentContextualToken();
TypeScript.Debug.assert(token.kind === 15 /* TemplateMiddleToken */ || token.kind === 16 /* TemplateEndToken */);
token = consumeToken(token);
}
else {
var diagnostic = getExpectedTokenDiagnostic(73 /* CloseBraceToken */);
addDiagnostic(diagnostic);
token = TypeScript.Syntax.emptyToken(16 /* TemplateEndToken */);
}
return new TypeScript.TemplateClauseSyntax(parseNodeData, expression, token);
}
function parseCastExpression(lessThanToken) {
return new TypeScript.CastExpressionSyntax(parseNodeData, consumeToken(lessThanToken), parseType(), eatToken(83 /* GreaterThanToken */), tryParseUnaryExpressionOrHigher(currentToken(), true));
}
function parseParenthesizedExpression(openParenToken) {
return new TypeScript.ParenthesizedExpressionSyntax(parseNodeData, consumeToken(openParenToken), allowInAnd(parseExpression), eatToken(75 /* CloseParenToken */));
}
function tryParseParenthesizedArrowFunctionExpression() {
var tokenKind = currentToken().kind;
if (tokenKind !== 74 /* OpenParenToken */ && tokenKind !== 82 /* LessThanToken */) {
return undefined;
}
if (isDefinitelyArrowFunctionExpression()) {
return tryParseParenthesizedArrowFunctionExpressionWorker(false);
}
if (!isPossiblyArrowFunctionExpression()) {
return undefined;
}
var rewindPoint = getRewindPoint();
var arrowFunction = tryParseParenthesizedArrowFunctionExpressionWorker(true);
if (arrowFunction === undefined) {
rewind(rewindPoint);
}
releaseRewindPoint(rewindPoint);
return arrowFunction;
}
function tryParseParenthesizedArrowFunctionExpressionWorker(requireArrow) {
var _currentToken = currentToken();
var callSignature = parseCallSignature(true);
if (requireArrow && currentToken().kind !== 87 /* EqualsGreaterThanToken */) {
return undefined;
}
return new TypeScript.ParenthesizedArrowFunctionExpressionSyntax(parseNodeData, callSignature, eatToken(87 /* EqualsGreaterThanToken */), parseArrowFunctionBody());
}
function parseArrowFunctionBody() {
if (isBlock()) {
return parseBlock(false, false);
}
var _modifierCount = modifierCount();
if (isStatement(_modifierCount, false) && !isExpressionStatement(currentToken()) && !isFunctionDeclaration(_modifierCount)) {
return parseBlock(true, false);
}
return tryParseAssignmentExpressionOrHigher(true);
}
function isSimpleArrowFunctionExpression(_currentToken) {
if (_currentToken.kind === 87 /* EqualsGreaterThanToken */) {
return true;
}
return isIdentifier(_currentToken) && peekToken(1).kind === 87 /* EqualsGreaterThanToken */;
}
function parseSimpleArrowFunctionExpression() {
return new TypeScript.SimpleArrowFunctionExpressionSyntax(parseNodeData, eatSimpleParameter(), eatToken(87 /* EqualsGreaterThanToken */), parseArrowFunctionBody());
}
function isBlock() {
return currentToken().kind === 72 /* OpenBraceToken */;
}
function isDefinitelyArrowFunctionExpression() {
var token0 = currentToken();
if (token0.kind !== 74 /* OpenParenToken */) {
return false;
}
var token1 = peekToken(1);
var token1Kind = token1.kind;
var token2;
if (token1Kind === 75 /* CloseParenToken */) {
token2 = peekToken(2);
var token2Kind = token2.kind;
return token2Kind === 108 /* ColonToken */ || token2Kind === 87 /* EqualsGreaterThanToken */ || token2Kind === 72 /* OpenBraceToken */;
}
if (token1Kind === 79 /* DotDotDotToken */) {
return true;
}
token2 = peekToken(2);
token2Kind = token2.kind;
if (TypeScript.SyntaxFacts.isAccessibilityModifier(token1Kind)) {
if (isIdentifier(token2)) {
return true;
}
}
if (!isIdentifier(token1)) {
return false;
}
if (token2Kind === 108 /* ColonToken */) {
return true;
}
var token3 = peekToken(3);
var token3Kind = token3.kind;
if (token2Kind === 107 /* QuestionToken */) {
if (token3Kind === 108 /* ColonToken */ || token3Kind === 75 /* CloseParenToken */ || token3Kind === 81 /* CommaToken */) {
return true;
}
}
if (token2Kind === 75 /* CloseParenToken */) {
if (token3Kind === 87 /* EqualsGreaterThanToken */) {
return true;
}
}
return false;
}
function isPossiblyArrowFunctionExpression() {
var token0 = currentToken();
if (token0.kind !== 74 /* OpenParenToken */) {
return true;
}
var token1 = peekToken(1);
if (!isIdentifier(token1)) {
return false;
}
var token2 = peekToken(2);
var token2Kind = token2.kind;
if (token2Kind === 109 /* EqualsToken */) {
return true;
}
if (token2Kind === 81 /* CommaToken */) {
return true;
}
if (token2Kind === 75 /* CloseParenToken */) {
var token3 = peekToken(3);
if (token3.kind === 108 /* ColonToken */) {
return true;
}
}
return false;
}
function parseObjectLiteralExpression(openBraceToken) {
return new TypeScript.ObjectLiteralExpressionSyntax(parseNodeData, consumeToken(openBraceToken), parseSeparatedSyntaxList(14 /* ObjectLiteralExpression_PropertyAssignments */), eatToken(73 /* CloseBraceToken */));
}
function tryParsePropertyAssignment(inErrorRecovery) {
if (isAccessor(modifierCount(), inErrorRecovery)) {
return parseAccessor(true);
}
var _currentToken = currentToken();
if (isIdentifier(_currentToken)) {
var token1 = peekToken(1);
if (token1.kind !== 108 /* ColonToken */ && token1.kind !== 74 /* OpenParenToken */ && token1.kind !== 82 /* LessThanToken */) {
return consumeToken(_currentToken);
}
}
if (isPropertyName(0, inErrorRecovery)) {
var propertyName = parsePropertyName();
if (isCallSignature(0)) {
return parseFunctionPropertyAssignment(propertyName);
}
else {
return new TypeScript.SimplePropertyAssignmentSyntax(parseNodeData, propertyName, eatToken(108 /* ColonToken */), allowInAnd(tryParseAssignmentExpressionOrHigher_Force));
}
}
return undefined;
}
function isPropertyAssignment(inErrorRecovery) {
return isAccessor(modifierCount(), inErrorRecovery) || isPropertyName(0, inErrorRecovery);
}
function isPropertyName(peekIndex, inErrorRecovery) {
var token = peekToken(peekIndex);
if (token.kind === 76 /* OpenBracketToken */) {
return !isIndexSignature(peekIndex);
}
return isPropertyNameToken(token, inErrorRecovery);
}
function isPropertyNameToken(token, inErrorRecovery) {
if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) {
if (inErrorRecovery) {
return isIdentifier(token);
}
else {
return true;
}
}
return isLiteralPropertyName(token);
}
function isLiteralPropertyName(token) {
var kind = token.kind;
return kind === 12 /* StringLiteral */ || kind === 11 /* NumericLiteral */ || kind === 13 /* NoSubstitutionTemplateToken */;
}
function parsePropertyName() {
var _currentToken = currentToken();
if (_currentToken.kind === 76 /* OpenBracketToken */) {
return parseComputedPropertyName(_currentToken);
}
else if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(_currentToken)) {
return eatIdentifierNameToken();
}
else {
return consumeToken(_currentToken);
}
}
function parseComputedPropertyName(openBracketToken) {
return new TypeScript.ComputedPropertyNameSyntax(parseNodeData, consumeToken(openBracketToken), allowInAnd(tryParseAssignmentExpressionOrHigher_Force), eatToken(77 /* CloseBracketToken */));
}
function parseFunctionPropertyAssignment(propertyName) {
return new TypeScript.FunctionPropertyAssignmentSyntax(parseNodeData, propertyName, parseCallSignature(false), parseBlock(false, true));
}
function parseArrayLiteralExpression(openBracketToken) {
return new TypeScript.ArrayLiteralExpressionSyntax(parseNodeData, consumeToken(openBracketToken), parseSeparatedSyntaxList(15 /* ArrayLiteralExpression_AssignmentExpressions */), eatToken(77 /* CloseBracketToken */));
}
function parseBlock(parseBlockEvenWithNoOpenBrace, checkForStrictMode) {
var openBraceToken = eatToken(72 /* OpenBraceToken */);
var statements;
if (parseBlockEvenWithNoOpenBrace || openBraceToken.fullWidth() > 0) {
var savedIsInStrictMode = strictMode;
var processItems = checkForStrictMode ? updateStrictModeState : undefined;
var statements = parseSyntaxList(5 /* Block_Statements */, processItems);
setStrictMode(savedIsInStrictMode);
}
return new TypeScript.BlockSyntax(parseNodeData, openBraceToken, statements || [], eatToken(73 /* CloseBraceToken */));
}
function parseCallSignature(requireCompleteTypeParameterList) {
return new TypeScript.CallSignatureSyntax(parseNodeData, tryParseTypeParameterList(requireCompleteTypeParameterList), parseParameterList(), parseOptionalTypeAnnotation(false));
}
function tryParseTypeParameterList(requireCompleteTypeParameterList) {
var _currentToken = currentToken();
if (_currentToken.kind !== 82 /* LessThanToken */) {
return undefined;
}
var rewindPoint = getRewindPoint();
var lessThanToken = consumeToken(_currentToken);
var typeParameters = parseSeparatedSyntaxList(19 /* TypeParameterList_TypeParameters */);
var greaterThanToken = eatToken(83 /* GreaterThanToken */);
if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) {
rewind(rewindPoint);
releaseRewindPoint(rewindPoint);
return undefined;
}
else {
releaseRewindPoint(rewindPoint);
return new TypeScript.TypeParameterListSyntax(parseNodeData, lessThanToken, typeParameters, greaterThanToken);
}
}
function isTypeParameter() {
return isIdentifier(currentToken());
}
function tryParseTypeParameter() {
if (!isIdentifier(currentToken())) {
return undefined;
}
return new TypeScript.TypeParameterSyntax(parseNodeData, eatIdentifierToken(), tryParseConstraint());
}
function tryParseConstraint() {
if (currentToken().kind !== 50 /* ExtendsKeyword */) {
return undefined;
}
return new TypeScript.ConstraintSyntax(parseNodeData, eatToken(50 /* ExtendsKeyword */), parseTypeOrExpression());
}
function tryParseParameterList() {
if (currentToken().kind === 74 /* OpenParenToken */) {
var token1 = peekToken(1);
if (token1.kind === 75 /* CloseParenToken */ || isParameterHelper(token1)) {
return parseParameterList();
}
}
return undefined;
}
function parseParameterList() {
var openParenToken;
return new TypeScript.ParameterListSyntax(parseNodeData, openParenToken = eatToken(74 /* OpenParenToken */), openParenToken.fullWidth() > 0 ? parseSeparatedSyntaxList(16 /* ParameterList_Parameters */) : [], eatToken(75 /* CloseParenToken */));
}
function parseOptionalTypeAnnotation(allowStringLiteral) {
return currentToken().kind === 108 /* ColonToken */ ? parseTypeAnnotation(allowStringLiteral) : undefined;
}
function parseTypeAnnotationType(allowStringLiteral) {
if (allowStringLiteral) {
var _currentToken = currentToken();
if (_currentToken.kind === 12 /* StringLiteral */) {
return consumeToken(_currentToken);
}
}
return parseType();
}
function parseTypeAnnotation(allowStringLiteral) {
return new TypeScript.TypeAnnotationSyntax(parseNodeData, consumeToken(currentToken()), parseTypeAnnotationType(allowStringLiteral));
}
function isType() {
var _currentToken = currentToken();
switch (_currentToken.kind) {
case 41 /* TypeOfKeyword */:
case 62 /* AnyKeyword */:
case 69 /* NumberKeyword */:
case 63 /* BooleanKeyword */:
case 71 /* StringKeyword */:
case 43 /* VoidKeyword */:
case 72 /* OpenBraceToken */:
case 74 /* OpenParenToken */:
case 82 /* LessThanToken */:
case 33 /* NewKeyword */:
return true;
default:
return isIdentifier(_currentToken);
}
}
function parseTypeOrExpression() {
var result = tryParseType();
if (result) {
return result;
}
var _currentToken = currentToken();
if (isExpression(_currentToken)) {
return tryParseUnaryExpressionOrHigher(_currentToken, true);
}
return eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected);
}
function parseType() {
return tryParseType() || eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected);
}
function tryParseType() {
if (isFunctionType()) {
return parseFunctionType();
}
if (currentToken().kind === 33 /* NewKeyword */) {
return parseConstructorType();
}
return tryParseUnionTypeOrHigher();
}
function tryParseUnionTypeOrHigher() {
var type = tryParsePrimaryType();
if (type) {
var barToken;
while ((barToken = currentToken()).kind === 101 /* BarToken */) {
type = new TypeScript.UnionTypeSyntax(parseNodeData, type, consumeToken(barToken), parsePrimaryType());
}
}
return type;
}
function parsePrimaryType() {
return tryParsePrimaryType() || eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected);
}
function tryParsePrimaryType() {
var type = tryParseNonArrayType();
while (type) {
var _currentToken = currentToken();
if (isOnDifferentLineThanPreviousToken(_currentToken) || _currentToken.kind !== 76 /* OpenBracketToken */) {
break;
}
type = new TypeScript.ArrayTypeSyntax(parseNodeData, type, consumeToken(_currentToken), eatToken(77 /* CloseBracketToken */));
}
return type;
}
function parseTypeQuery(typeOfKeyword) {
return new TypeScript.TypeQuerySyntax(parseNodeData, consumeToken(typeOfKeyword), parseName(true));
}
function tryParseNonArrayType() {
var _currentToken = currentToken();
switch (_currentToken.kind) {
case 62 /* AnyKeyword */:
case 69 /* NumberKeyword */:
case 63 /* BooleanKeyword */:
case 71 /* StringKeyword */:
if (peekToken(1).kind === 78 /* DotToken */) {
break;
}
return consumeToken(_currentToken);
case 43 /* VoidKeyword */: return consumeToken(_currentToken);
case 74 /* OpenParenToken */: return parseParenthesizedType(_currentToken);
case 72 /* OpenBraceToken */: return parseObjectType();
case 41 /* TypeOfKeyword */: return parseTypeQuery(_currentToken);
case 76 /* OpenBracketToken */: return parseTupleType(_currentToken);
}
return tryParseNameOrGenericType();
}
function parseParenthesizedType(openParenToken) {
return new TypeScript.ParenthesizedTypeSyntax(parseNodeData, consumeToken(openParenToken), parseType(), eatToken(75 /* CloseParenToken */));
}
function tryParseNameOrGenericType() {
var name = tryParseName(false);
if (name === undefined) {
return undefined;
}
if (isOnDifferentLineThanPreviousToken(currentToken())) {
return name;
}
var typeArgumentList = tryParseTypeArgumentList(false);
return !typeArgumentList ? name : new TypeScript.GenericTypeSyntax(parseNodeData, name, typeArgumentList);
}
function isFunctionType() {
var token0 = currentToken();
var token0Kind = token0.kind;
if (token0Kind === 82 /* LessThanToken */) {
return true;
}
if (token0Kind === 74 /* OpenParenToken */) {
var token1 = peekToken(1);
var token1Kind = token1.kind;
if (token1Kind === 75 /* CloseParenToken */ || token1Kind === 79 /* DotDotDotToken */) {
return true;
}
if (isModifierKind(token1Kind) || isIdentifier(token1)) {
var token2 = peekToken(2);
var token2Kind = token2.kind;
if (token2Kind === 108 /* ColonToken */ || token2Kind === 81 /* CommaToken */ || token2Kind === 107 /* QuestionToken */ || token2Kind === 109 /* EqualsToken */ || isIdentifier(token2) || isModifierKind(token2Kind)) {
return true;
}
if (token2Kind === 75 /* CloseParenToken */) {
return peekToken(3).kind === 87 /* EqualsGreaterThanToken */;
}
}
}
return false;
}
function parseFunctionType() {
return new TypeScript.FunctionTypeSyntax(parseNodeData, tryParseTypeParameterList(false), parseParameterList(), eatToken(87 /* EqualsGreaterThanToken */), parseType());
}
function parseConstructorType() {
return new TypeScript.ConstructorTypeSyntax(parseNodeData, eatToken(33 /* NewKeyword */), tryParseTypeParameterList(false), parseParameterList(), eatToken(87 /* EqualsGreaterThanToken */), parseType());
}
function isParameter() {
if (currentNode() && currentNode().kind === 208 /* Parameter */) {
return true;
}
return isParameterHelper(currentToken());
}
function isParameterHelper(token) {
var tokenKind = token.kind;
return tokenKind === 79 /* DotDotDotToken */ || isModifierKind(tokenKind) || isIdentifier(token);
}
function eatSimpleParameter() {
return new TypeScript.ParameterSyntax(parseNodeData, undefined, [], eatIdentifierToken(), undefined, undefined, undefined);
}
function tryParseParameter() {
var node = currentNode();
if (node && node.kind === 208 /* Parameter */) {
consumeNode(node);
return node;
}
var dotDotDotToken = tryEatToken(79 /* DotDotDotToken */);
var modifiers = parseModifiers();
var _currentToken = currentToken();
if (!isIdentifier(_currentToken) && !dotDotDotToken && modifiers.length === 0) {
if (isModifierKind(_currentToken.kind)) {
modifiers = TypeScript.Syntax.list([consumeToken(_currentToken)]);
}
else {
return undefined;
}
}
var identifier = eatIdentifierToken();
var questionToken = tryEatToken(107 /* QuestionToken */);
var typeAnnotation = parseOptionalTypeAnnotation(true);
var equalsValueClause = undefined;
if (isEqualsValueClause(true)) {
equalsValueClause = parseEqualsValueClause();
}
return new TypeScript.ParameterSyntax(parseNodeData, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause);
}
function parseSyntaxList(currentListType, processItems) {
var savedListParsingState = listParsingState;
listParsingState |= (1 << currentListType);
var result = parseSyntaxListWorker(currentListType, processItems);
listParsingState = savedListParsingState;
return result;
}
function parseSeparatedSyntaxList(currentListType) {
var savedListParsingState = listParsingState;
listParsingState |= (1 << currentListType);
var result = parseSeparatedSyntaxListWorker(currentListType);
listParsingState = savedListParsingState;
return result;
}
function abortParsingListOrMoveToNextToken(currentListType) {
reportUnexpectedTokenDiagnostic(currentListType);
for (var state = ListParsingState.LastListParsingState; state >= ListParsingState.FirstListParsingState; state--) {
if ((listParsingState & (1 << state)) !== 0) {
if (isExpectedListTerminator(state) || isExpectedListItem(state, true)) {
return true;
}
}
}
skipToken(currentToken());
return false;
}
function tryParseExpectedListItem(currentListType, inErrorRecovery, items, processItems) {
var item = tryParseExpectedListItemWorker(currentListType, inErrorRecovery);
if (item !== undefined) {
items.push(item);
if (processItems) {
processItems(items);
}
}
}
function listIsTerminated(currentListType) {
return isExpectedListTerminator(currentListType) || currentToken().kind === 8 /* EndOfFileToken */;
}
function parseSyntaxListWorker(currentListType, processItems) {
var items = [];
while (true) {
var oldItemsLength = items.length;
tryParseExpectedListItem(currentListType, false, items, processItems);
if (items.length === oldItemsLength) {
if (listIsTerminated(currentListType)) {
break;
}
var abort = abortParsingListOrMoveToNextToken(currentListType);
if (abort) {
break;
}
}
}
return TypeScript.Syntax.list(items);
}
function parseSeparatedSyntaxListWorker(currentListType) {
var nodesAndSeparators = [];
var _separatorKind = currentListType === 9 /* ObjectType_TypeMembers */ ? 80 /* SemicolonToken */ : 81 /* CommaToken */;
var allowAutomaticSemicolonInsertion = _separatorKind === 80 /* SemicolonToken */;
var inErrorRecovery = false;
while (true) {
var oldArrayLength = nodesAndSeparators.length;
tryParseExpectedListItem(currentListType, inErrorRecovery, nodesAndSeparators, undefined);
if (nodesAndSeparators.length === oldArrayLength) {
if (listIsTerminated(currentListType)) {
break;
}
var abort = abortParsingListOrMoveToNextToken(currentListType);
if (abort) {
break;
}
else {
inErrorRecovery = true;
continue;
}
}
inErrorRecovery = false;
var _currentToken = currentToken();
var tokenKind = _currentToken.kind;
if (tokenKind === _separatorKind || tokenKind === 81 /* CommaToken */) {
nodesAndSeparators.push(consumeToken(_currentToken));
continue;
}
if (listIsTerminated(currentListType)) {
break;
}
if (allowAutomaticSemicolonInsertion && canEatAutomaticSemicolon(false)) {
var semicolonToken = eatExplicitOrAutomaticSemicolon(false) || TypeScript.Syntax.emptyToken(80 /* SemicolonToken */);
nodesAndSeparators.push(semicolonToken);
continue;
}
nodesAndSeparators.push(eatToken(_separatorKind));
inErrorRecovery = true;
}
return TypeScript.Syntax.separatedList(nodesAndSeparators);
}
function reportUnexpectedTokenDiagnostic(listType) {
var token = currentToken();
var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token, source.text), TypeScript.width(token), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [getExpectedListElementType(listType)]);
addDiagnostic(diagnostic);
}
function addDiagnostic(diagnostic) {
if (diagnostics.length > 0 && diagnostics[diagnostics.length - 1].start() === diagnostic.start()) {
return;
}
diagnostics.push(diagnostic);
}
function isExpectedListTerminator(currentListType) {
switch (currentListType) {
case 0 /* SourceUnit_ModuleElements */: return isExpectedSourceUnit_ModuleElementsTerminator();
case 1 /* ClassDeclaration_ClassElements */: return isExpectedClassDeclaration_ClassElementsTerminator();
case 2 /* ModuleDeclaration_ModuleElements */: return isExpectedModuleDeclaration_ModuleElementsTerminator();
case 3 /* SwitchStatement_SwitchClauses */: return isExpectedSwitchStatement_SwitchClausesTerminator();
case 4 /* SwitchClause_Statements */: return isExpectedSwitchClause_StatementsTerminator();
case 5 /* Block_Statements */: return isExpectedBlock_StatementsTerminator();
case 6 /* TryBlock_Statements */: return isExpectedTryBlock_StatementsTerminator();
case 7 /* CatchBlock_Statements */: return isExpectedCatchBlock_StatementsTerminator();
case 8 /* EnumDeclaration_EnumElements */: return isExpectedEnumDeclaration_EnumElementsTerminator();
case 9 /* ObjectType_TypeMembers */: return isExpectedObjectType_TypeMembersTerminator();
case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: return isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator();
case 11 /* HeritageClause_TypeNameList */: return isExpectedHeritageClause_TypeNameListTerminator();
case 12 /* VariableDeclaration_VariableDeclarators */: return isExpectedVariableDeclaration_VariableDeclaratorsTerminator();
case 13 /* ArgumentList_AssignmentExpressions */: return isExpectedArgumentList_AssignmentExpressionsTerminator();
case 14 /* ObjectLiteralExpression_PropertyAssignments */: return isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator();
case 15 /* ArrayLiteralExpression_AssignmentExpressions */: return isExpectedLiteralExpression_AssignmentExpressionsTerminator();
case 16 /* ParameterList_Parameters */: return isExpectedParameterList_ParametersTerminator();
case 17 /* IndexSignature_Parameters */: return isExpectedIndexSignature_ParametersTerminator();
case 18 /* TypeArgumentList_Types */: return isExpectedTypeArgumentList_TypesTerminator();
case 19 /* TypeParameterList_TypeParameters */: return isExpectedTypeParameterList_TypeParametersTerminator();
case 20 /* TupleType_Types */: return isExpectedTupleType_TypesTerminator();
default:
throw TypeScript.Errors.invalidOperation();
}
}
function isExpectedSourceUnit_ModuleElementsTerminator() {
return currentToken().kind === 8 /* EndOfFileToken */;
}
function isExpectedEnumDeclaration_EnumElementsTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedModuleDeclaration_ModuleElementsTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedObjectType_TypeMembersTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedLiteralExpression_AssignmentExpressionsTerminator() {
return currentToken().kind === 77 /* CloseBracketToken */;
}
function isExpectedTypeArgumentList_TypesTerminator() {
var token = currentToken();
var tokenKind = token.kind;
if (tokenKind === 83 /* GreaterThanToken */) {
return true;
}
if (canFollowTypeArgumentListInExpression(tokenKind)) {
return true;
}
return false;
}
function isExpectedTupleType_TypesTerminator() {
var token = currentToken();
var tokenKind = token.kind;
if (tokenKind === 77 /* CloseBracketToken */) {
return true;
}
return false;
}
function isExpectedTypeParameterList_TypeParametersTerminator() {
var tokenKind = currentToken().kind;
if (tokenKind === 83 /* GreaterThanToken */) {
return true;
}
if (tokenKind === 74 /* OpenParenToken */ || tokenKind === 72 /* OpenBraceToken */ || tokenKind === 50 /* ExtendsKeyword */ || tokenKind === 53 /* ImplementsKeyword */) {
return true;
}
return false;
}
function isExpectedParameterList_ParametersTerminator() {
var tokenKind = currentToken().kind;
if (tokenKind === 75 /* CloseParenToken */) {
return true;
}
if (tokenKind === 72 /* OpenBraceToken */) {
return true;
}
if (tokenKind === 87 /* EqualsGreaterThanToken */) {
return true;
}
return false;
}
function isExpectedIndexSignature_ParametersTerminator() {
var tokenKind = currentToken().kind;
if (tokenKind === 77 /* CloseBracketToken */) {
return true;
}
if (tokenKind === 72 /* OpenBraceToken */) {
return true;
}
return false;
}
function isExpectedVariableDeclaration_VariableDeclaratorsTerminator() {
if (disallowIn) {
var tokenKind = currentToken().kind;
if (tokenKind === 80 /* SemicolonToken */ || tokenKind === 75 /* CloseParenToken */) {
return true;
}
if (tokenKind === 31 /* InKeyword */) {
return true;
}
return false;
}
else {
if (currentToken().kind === 87 /* EqualsGreaterThanToken */) {
return true;
}
return canEatExplicitOrAutomaticSemicolon(false);
}
}
function isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator() {
var tokenKind = currentToken().kind;
if (tokenKind === 72 /* OpenBraceToken */ || tokenKind === 73 /* CloseBraceToken */) {
return true;
}
return false;
}
function isExpectedHeritageClause_TypeNameListTerminator() {
var tokenKind = currentToken().kind;
if (tokenKind === 50 /* ExtendsKeyword */ || tokenKind === 53 /* ImplementsKeyword */) {
return true;
}
if (isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) {
return true;
}
return false;
}
function isExpectedArgumentList_AssignmentExpressionsTerminator() {
var token0 = currentToken();
var tokenKind = token0.kind;
return tokenKind === 75 /* CloseParenToken */ || tokenKind === 80 /* SemicolonToken */;
}
function isExpectedClassDeclaration_ClassElementsTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedSwitchStatement_SwitchClausesTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedSwitchClause_StatementsTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */ || isSwitchClause();
}
function isExpectedBlock_StatementsTerminator() {
return currentToken().kind === 73 /* CloseBraceToken */;
}
function isExpectedTryBlock_StatementsTerminator() {
var tokenKind = currentToken().kind;
return tokenKind === 19 /* CatchKeyword */ || tokenKind === 27 /* FinallyKeyword */;
}
function isExpectedCatchBlock_StatementsTerminator() {
return currentToken().kind === 27 /* FinallyKeyword */;
}
function isExpectedListItem(currentListType, inErrorRecovery) {
switch (currentListType) {
case 0 /* SourceUnit_ModuleElements */: return isModuleElement(inErrorRecovery);
case 1 /* ClassDeclaration_ClassElements */: return isClassElement(inErrorRecovery);
case 2 /* ModuleDeclaration_ModuleElements */: return isModuleElement(inErrorRecovery);
case 3 /* SwitchStatement_SwitchClauses */: return isSwitchClause();
case 4 /* SwitchClause_Statements */: return isStatement(modifierCount(), inErrorRecovery);
case 5 /* Block_Statements */: return isStatement(modifierCount(), inErrorRecovery);
case 6 /* TryBlock_Statements */: return false;
case 7 /* CatchBlock_Statements */: return false;
case 8 /* EnumDeclaration_EnumElements */: return isEnumElement(inErrorRecovery);
case 9 /* ObjectType_TypeMembers */: return isTypeMember(inErrorRecovery);
case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: return isHeritageClause();
case 11 /* HeritageClause_TypeNameList */: return isHeritageClauseTypeName();
case 12 /* VariableDeclaration_VariableDeclarators */: return isVariableDeclarator();
case 13 /* ArgumentList_AssignmentExpressions */: return isExpectedArgumentList_AssignmentExpression();
case 14 /* ObjectLiteralExpression_PropertyAssignments */: return isPropertyAssignment(inErrorRecovery);
case 15 /* ArrayLiteralExpression_AssignmentExpressions */: return isAssignmentOrOmittedExpression();
case 16 /* ParameterList_Parameters */: return isParameter();
case 17 /* IndexSignature_Parameters */: return isParameter();
case 18 /* TypeArgumentList_Types */: return isType();
case 19 /* TypeParameterList_TypeParameters */: return isTypeParameter();
case 20 /* TupleType_Types */: return isType();
default: throw TypeScript.Errors.invalidOperation();
}
}
function isExpectedArgumentList_AssignmentExpression() {
var _currentToken = currentToken();
if (isExpression(_currentToken)) {
return true;
}
if (_currentToken.kind === 81 /* CommaToken */) {
return true;
}
return false;
}
function tryParseExpectedListItemWorker(currentListType, inErrorRecovery) {
switch (currentListType) {
case 0 /* SourceUnit_ModuleElements */: return tryParseModuleElement(inErrorRecovery);
case 1 /* ClassDeclaration_ClassElements */: return tryParseClassElement(inErrorRecovery);
case 2 /* ModuleDeclaration_ModuleElements */: return tryParseModuleElement(inErrorRecovery);
case 3 /* SwitchStatement_SwitchClauses */: return tryParseSwitchClause();
case 4 /* SwitchClause_Statements */: return tryParseStatement(inErrorRecovery);
case 5 /* Block_Statements */: return tryParseStatement(inErrorRecovery);
case 6 /* TryBlock_Statements */: return tryParseStatement(inErrorRecovery);
case 7 /* CatchBlock_Statements */: return tryParseStatement(inErrorRecovery);
case 8 /* EnumDeclaration_EnumElements */: return tryParseEnumElement(inErrorRecovery);
case 9 /* ObjectType_TypeMembers */: return tryParseTypeMember(inErrorRecovery);
case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: return tryParseHeritageClause();
case 11 /* HeritageClause_TypeNameList */: return tryParseHeritageClauseTypeName();
case 12 /* VariableDeclaration_VariableDeclarators */: return tryParseVariableDeclarator();
case 13 /* ArgumentList_AssignmentExpressions */: return tryParseArgumentListExpression();
case 14 /* ObjectLiteralExpression_PropertyAssignments */: return tryParsePropertyAssignment(inErrorRecovery);
case 15 /* ArrayLiteralExpression_AssignmentExpressions */: return tryParseAssignmentOrOmittedExpression();
case 16 /* ParameterList_Parameters */: return tryParseParameter();
case 17 /* IndexSignature_Parameters */: return tryParseParameter();
case 18 /* TypeArgumentList_Types */: return tryParseType();
case 19 /* TypeParameterList_TypeParameters */: return tryParseTypeParameter();
case 20 /* TupleType_Types */: return tryParseType();
default: throw TypeScript.Errors.invalidOperation();
}
}
function getExpectedListElementType(currentListType) {
switch (currentListType) {
case 0 /* SourceUnit_ModuleElements */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, undefined);
case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: return '{';
case 1 /* ClassDeclaration_ClassElements */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, undefined);
case 2 /* ModuleDeclaration_ModuleElements */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, undefined);
case 3 /* SwitchStatement_SwitchClauses */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, undefined);
case 4 /* SwitchClause_Statements */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, undefined);
case 5 /* Block_Statements */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, undefined);
case 12 /* VariableDeclaration_VariableDeclarators */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, undefined);
case 8 /* EnumDeclaration_EnumElements */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, undefined);
case 9 /* ObjectType_TypeMembers */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, undefined);
case 13 /* ArgumentList_AssignmentExpressions */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, undefined);
case 11 /* HeritageClause_TypeNameList */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, undefined);
case 14 /* ObjectLiteralExpression_PropertyAssignments */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, undefined);
case 16 /* ParameterList_Parameters */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, undefined);
case 17 /* IndexSignature_Parameters */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, undefined);
case 18 /* TypeArgumentList_Types */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, undefined);
case 19 /* TypeParameterList_TypeParameters */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, undefined);
case 20 /* TupleType_Types */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, undefined);
case 15 /* ArrayLiteralExpression_AssignmentExpressions */: return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, undefined);
default: throw TypeScript.Errors.invalidOperation();
}
}
return parseSyntaxTree;
}
var BinaryExpressionPrecedence;
(function (BinaryExpressionPrecedence) {
BinaryExpressionPrecedence[BinaryExpressionPrecedence["Lowest"] = 1] = "Lowest";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["LogicalOrExpressionPrecedence"] = 2] = "LogicalOrExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["LogicalAndExpressionPrecedence"] = 3] = "LogicalAndExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 4] = "BitwiseOrExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 5] = "BitwiseExclusiveOrExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 6] = "BitwiseAndExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["EqualityExpressionPrecedence"] = 7] = "EqualityExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["RelationalExpressionPrecedence"] = 8] = "RelationalExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["ShiftExpressionPrecdence"] = 9] = "ShiftExpressionPrecdence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["AdditiveExpressionPrecedence"] = 10] = "AdditiveExpressionPrecedence";
BinaryExpressionPrecedence[BinaryExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 11] = "MultiplicativeExpressionPrecedence";
})(BinaryExpressionPrecedence || (BinaryExpressionPrecedence = {}));
var ListParsingState;
(function (ListParsingState) {
ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 0] = "SourceUnit_ModuleElements";
ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1] = "ClassDeclaration_ClassElements";
ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 2] = "ModuleDeclaration_ModuleElements";
ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 3] = "SwitchStatement_SwitchClauses";
ListParsingState[ListParsingState["SwitchClause_Statements"] = 4] = "SwitchClause_Statements";
ListParsingState[ListParsingState["Block_Statements"] = 5] = "Block_Statements";
ListParsingState[ListParsingState["TryBlock_Statements"] = 6] = "TryBlock_Statements";
ListParsingState[ListParsingState["CatchBlock_Statements"] = 7] = "CatchBlock_Statements";
ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 8] = "EnumDeclaration_EnumElements";
ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 9] = "ObjectType_TypeMembers";
ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 10] = "ClassOrInterfaceDeclaration_HeritageClauses";
ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 11] = "HeritageClause_TypeNameList";
ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators"] = 12] = "VariableDeclaration_VariableDeclarators";
ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 13] = "ArgumentList_AssignmentExpressions";
ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 14] = "ObjectLiteralExpression_PropertyAssignments";
ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 15] = "ArrayLiteralExpression_AssignmentExpressions";
ListParsingState[ListParsingState["ParameterList_Parameters"] = 16] = "ParameterList_Parameters";
ListParsingState[ListParsingState["IndexSignature_Parameters"] = 17] = "IndexSignature_Parameters";
ListParsingState[ListParsingState["TypeArgumentList_Types"] = 18] = "TypeArgumentList_Types";
ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 19] = "TypeParameterList_TypeParameters";
ListParsingState[ListParsingState["TupleType_Types"] = 20] = "TupleType_Types";
ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState";
ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TupleType_Types] = "LastListParsingState";
})(ListParsingState || (ListParsingState = {}));
TypeScript.Debug.assert(ListParsingState.LastListParsingState <= 30);
var parseSyntaxTree = createParseSyntaxTree();
function parse(fileName, text, languageVersion, isDeclaration) {
return parseSource(TypeScript.Scanner.createParserSource(fileName, text, languageVersion), isDeclaration);
}
Parser.parse = parse;
function parseSource(source, isDeclaration) {
return parseSyntaxTree(source, isDeclaration);
}
Parser.parseSource = parseSource;
})(Parser = TypeScript.Parser || (TypeScript.Parser = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.SourceUnitSyntax = function (data, moduleElements, endOfFileToken) {
if (data) {
this.__data = data;
}
this.moduleElements = moduleElements, this.endOfFileToken = endOfFileToken, moduleElements.parent = this, endOfFileToken.parent = this;
};
TypeScript.SourceUnitSyntax.prototype.kind = 122 /* SourceUnit */;
TypeScript.SourceUnitSyntax.prototype.childCount = 2;
TypeScript.SourceUnitSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.moduleElements;
case 1: return this.endOfFileToken;
}
};
TypeScript.QualifiedNameSyntax = function (data, left, dotToken, right) {
if (data) {
this.__data = data;
}
this.left = left, this.dotToken = dotToken, this.right = right, left.parent = this, dotToken.parent = this, right.parent = this;
};
TypeScript.QualifiedNameSyntax.prototype.kind = 123 /* QualifiedName */;
TypeScript.QualifiedNameSyntax.prototype.childCount = 3;
TypeScript.QualifiedNameSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.left;
case 1: return this.dotToken;
case 2: return this.right;
}
};
TypeScript.ObjectTypeSyntax = function (data, openBraceToken, typeMembers, closeBraceToken) {
if (data) {
this.__data = data;
}
this.openBraceToken = openBraceToken, this.typeMembers = typeMembers, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, typeMembers.parent = this, closeBraceToken.parent = this;
};
TypeScript.ObjectTypeSyntax.prototype.kind = 124 /* ObjectType */;
TypeScript.ObjectTypeSyntax.prototype.childCount = 3;
TypeScript.ObjectTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBraceToken;
case 1: return this.typeMembers;
case 2: return this.closeBraceToken;
}
};
TypeScript.FunctionTypeSyntax = function (data, typeParameterList, parameterList, equalsGreaterThanToken, type) {
if (data) {
this.__data = data;
}
this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, this.type = type, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, equalsGreaterThanToken.parent = this, type.parent = this;
};
TypeScript.FunctionTypeSyntax.prototype.kind = 125 /* FunctionType */;
TypeScript.FunctionTypeSyntax.prototype.childCount = 4;
TypeScript.FunctionTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.typeParameterList;
case 1: return this.parameterList;
case 2: return this.equalsGreaterThanToken;
case 3: return this.type;
}
};
TypeScript.ArrayTypeSyntax = function (data, type, openBracketToken, closeBracketToken) {
if (data) {
this.__data = data;
}
this.type = type, this.openBracketToken = openBracketToken, this.closeBracketToken = closeBracketToken, type.parent = this, openBracketToken.parent = this, closeBracketToken.parent = this;
};
TypeScript.ArrayTypeSyntax.prototype.kind = 126 /* ArrayType */;
TypeScript.ArrayTypeSyntax.prototype.childCount = 3;
TypeScript.ArrayTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.type;
case 1: return this.openBracketToken;
case 2: return this.closeBracketToken;
}
};
TypeScript.ConstructorTypeSyntax = function (data, newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) {
if (data) {
this.__data = data;
}
this.newKeyword = newKeyword, this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, this.type = type, newKeyword.parent = this, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, equalsGreaterThanToken.parent = this, type.parent = this;
};
TypeScript.ConstructorTypeSyntax.prototype.kind = 127 /* ConstructorType */;
TypeScript.ConstructorTypeSyntax.prototype.childCount = 5;
TypeScript.ConstructorTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.newKeyword;
case 1: return this.typeParameterList;
case 2: return this.parameterList;
case 3: return this.equalsGreaterThanToken;
case 4: return this.type;
}
};
TypeScript.GenericTypeSyntax = function (data, name, typeArgumentList) {
if (data) {
this.__data = data;
}
this.name = name, this.typeArgumentList = typeArgumentList, name.parent = this, typeArgumentList.parent = this;
};
TypeScript.GenericTypeSyntax.prototype.kind = 128 /* GenericType */;
TypeScript.GenericTypeSyntax.prototype.childCount = 2;
TypeScript.GenericTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.name;
case 1: return this.typeArgumentList;
}
};
TypeScript.TypeQuerySyntax = function (data, typeOfKeyword, name) {
if (data) {
this.__data = data;
}
this.typeOfKeyword = typeOfKeyword, this.name = name, typeOfKeyword.parent = this, name.parent = this;
};
TypeScript.TypeQuerySyntax.prototype.kind = 129 /* TypeQuery */;
TypeScript.TypeQuerySyntax.prototype.childCount = 2;
TypeScript.TypeQuerySyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.typeOfKeyword;
case 1: return this.name;
}
};
TypeScript.TupleTypeSyntax = function (data, openBracketToken, types, closeBracketToken) {
if (data) {
this.__data = data;
}
this.openBracketToken = openBracketToken, this.types = types, this.closeBracketToken = closeBracketToken, openBracketToken.parent = this, types.parent = this, closeBracketToken.parent = this;
};
TypeScript.TupleTypeSyntax.prototype.kind = 130 /* TupleType */;
TypeScript.TupleTypeSyntax.prototype.childCount = 3;
TypeScript.TupleTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBracketToken;
case 1: return this.types;
case 2: return this.closeBracketToken;
}
};
TypeScript.UnionTypeSyntax = function (data, left, barToken, right) {
if (data) {
this.__data = data;
}
this.left = left, this.barToken = barToken, this.right = right, left.parent = this, barToken.parent = this, right.parent = this;
};
TypeScript.UnionTypeSyntax.prototype.kind = 131 /* UnionType */;
TypeScript.UnionTypeSyntax.prototype.childCount = 3;
TypeScript.UnionTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.left;
case 1: return this.barToken;
case 2: return this.right;
}
};
TypeScript.ParenthesizedTypeSyntax = function (data, openParenToken, type, closeParenToken) {
if (data) {
this.__data = data;
}
this.openParenToken = openParenToken, this.type = type, this.closeParenToken = closeParenToken, openParenToken.parent = this, type.parent = this, closeParenToken.parent = this;
};
TypeScript.ParenthesizedTypeSyntax.prototype.kind = 132 /* ParenthesizedType */;
TypeScript.ParenthesizedTypeSyntax.prototype.childCount = 3;
TypeScript.ParenthesizedTypeSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openParenToken;
case 1: return this.type;
case 2: return this.closeParenToken;
}
};
TypeScript.InterfaceDeclarationSyntax = function (data, modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.interfaceKeyword = interfaceKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, this.body = body, modifiers.parent = this, interfaceKeyword.parent = this, identifier.parent = this, typeParameterList && (typeParameterList.parent = this), heritageClauses.parent = this, body.parent = this;
};
TypeScript.InterfaceDeclarationSyntax.prototype.kind = 133 /* InterfaceDeclaration */;
TypeScript.InterfaceDeclarationSyntax.prototype.childCount = 6;
TypeScript.InterfaceDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.interfaceKeyword;
case 2: return this.identifier;
case 3: return this.typeParameterList;
case 4: return this.heritageClauses;
case 5: return this.body;
}
};
TypeScript.FunctionDeclarationSyntax = function (data, modifiers, functionKeyword, identifier, callSignature, body) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.functionKeyword = functionKeyword, this.identifier = identifier, this.callSignature = callSignature, this.body = body, modifiers.parent = this, functionKeyword.parent = this, identifier.parent = this, callSignature.parent = this, body && (body.parent = this);
};
TypeScript.FunctionDeclarationSyntax.prototype.kind = 134 /* FunctionDeclaration */;
TypeScript.FunctionDeclarationSyntax.prototype.childCount = 5;
TypeScript.FunctionDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.functionKeyword;
case 2: return this.identifier;
case 3: return this.callSignature;
case 4: return this.body;
}
};
TypeScript.ModuleDeclarationSyntax = function (data, modifiers, moduleKeyword, name, openBraceToken, moduleElements, closeBraceToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.moduleKeyword = moduleKeyword, this.name = name, this.openBraceToken = openBraceToken, this.moduleElements = moduleElements, this.closeBraceToken = closeBraceToken, modifiers.parent = this, moduleKeyword.parent = this, name.parent = this, openBraceToken.parent = this, moduleElements.parent = this, closeBraceToken.parent = this;
};
TypeScript.ModuleDeclarationSyntax.prototype.kind = 135 /* ModuleDeclaration */;
TypeScript.ModuleDeclarationSyntax.prototype.childCount = 6;
TypeScript.ModuleDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.moduleKeyword;
case 2: return this.name;
case 3: return this.openBraceToken;
case 4: return this.moduleElements;
case 5: return this.closeBraceToken;
}
};
TypeScript.ClassDeclarationSyntax = function (data, modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.classKeyword = classKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, this.openBraceToken = openBraceToken, this.classElements = classElements, this.closeBraceToken = closeBraceToken, modifiers.parent = this, classKeyword.parent = this, identifier.parent = this, typeParameterList && (typeParameterList.parent = this), heritageClauses.parent = this, openBraceToken.parent = this, classElements.parent = this, closeBraceToken.parent = this;
};
TypeScript.ClassDeclarationSyntax.prototype.kind = 136 /* ClassDeclaration */;
TypeScript.ClassDeclarationSyntax.prototype.childCount = 8;
TypeScript.ClassDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.classKeyword;
case 2: return this.identifier;
case 3: return this.typeParameterList;
case 4: return this.heritageClauses;
case 5: return this.openBraceToken;
case 6: return this.classElements;
case 7: return this.closeBraceToken;
}
};
TypeScript.EnumDeclarationSyntax = function (data, modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.enumKeyword = enumKeyword, this.identifier = identifier, this.openBraceToken = openBraceToken, this.enumElements = enumElements, this.closeBraceToken = closeBraceToken, modifiers.parent = this, enumKeyword.parent = this, identifier.parent = this, openBraceToken.parent = this, enumElements.parent = this, closeBraceToken.parent = this;
};
TypeScript.EnumDeclarationSyntax.prototype.kind = 137 /* EnumDeclaration */;
TypeScript.EnumDeclarationSyntax.prototype.childCount = 6;
TypeScript.EnumDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.enumKeyword;
case 2: return this.identifier;
case 3: return this.openBraceToken;
case 4: return this.enumElements;
case 5: return this.closeBraceToken;
}
};
TypeScript.ImportDeclarationSyntax = function (data, modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.importKeyword = importKeyword, this.identifier = identifier, this.equalsToken = equalsToken, this.moduleReference = moduleReference, this.semicolonToken = semicolonToken, modifiers.parent = this, importKeyword.parent = this, identifier.parent = this, equalsToken.parent = this, moduleReference.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.ImportDeclarationSyntax.prototype.kind = 138 /* ImportDeclaration */;
TypeScript.ImportDeclarationSyntax.prototype.childCount = 6;
TypeScript.ImportDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.importKeyword;
case 2: return this.identifier;
case 3: return this.equalsToken;
case 4: return this.moduleReference;
case 5: return this.semicolonToken;
}
};
TypeScript.ExportAssignmentSyntax = function (data, exportKeyword, equalsToken, identifier, semicolonToken) {
if (data) {
this.__data = data;
}
this.exportKeyword = exportKeyword, this.equalsToken = equalsToken, this.identifier = identifier, this.semicolonToken = semicolonToken, exportKeyword.parent = this, equalsToken.parent = this, identifier.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.ExportAssignmentSyntax.prototype.kind = 139 /* ExportAssignment */;
TypeScript.ExportAssignmentSyntax.prototype.childCount = 4;
TypeScript.ExportAssignmentSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.exportKeyword;
case 1: return this.equalsToken;
case 2: return this.identifier;
case 3: return this.semicolonToken;
}
};
TypeScript.MemberFunctionDeclarationSyntax = function (data, modifiers, propertyName, callSignature, body) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.propertyName = propertyName, this.callSignature = callSignature, this.body = body, modifiers.parent = this, propertyName.parent = this, callSignature.parent = this, body && (body.parent = this);
};
TypeScript.MemberFunctionDeclarationSyntax.prototype.kind = 140 /* MemberFunctionDeclaration */;
TypeScript.MemberFunctionDeclarationSyntax.prototype.childCount = 4;
TypeScript.MemberFunctionDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.propertyName;
case 2: return this.callSignature;
case 3: return this.body;
}
};
TypeScript.MemberVariableDeclarationSyntax = function (data, modifiers, variableDeclarator, semicolonToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.variableDeclarator = variableDeclarator, this.semicolonToken = semicolonToken, modifiers.parent = this, variableDeclarator.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.MemberVariableDeclarationSyntax.prototype.kind = 141 /* MemberVariableDeclaration */;
TypeScript.MemberVariableDeclarationSyntax.prototype.childCount = 3;
TypeScript.MemberVariableDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.variableDeclarator;
case 2: return this.semicolonToken;
}
};
TypeScript.ConstructorDeclarationSyntax = function (data, modifiers, constructorKeyword, callSignature, body) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.constructorKeyword = constructorKeyword, this.callSignature = callSignature, this.body = body, modifiers.parent = this, constructorKeyword.parent = this, callSignature.parent = this, body && (body.parent = this);
};
TypeScript.ConstructorDeclarationSyntax.prototype.kind = 142 /* ConstructorDeclaration */;
TypeScript.ConstructorDeclarationSyntax.prototype.childCount = 4;
TypeScript.ConstructorDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.constructorKeyword;
case 2: return this.callSignature;
case 3: return this.body;
}
};
TypeScript.IndexMemberDeclarationSyntax = function (data, modifiers, indexSignature, semicolonToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.indexSignature = indexSignature, this.semicolonToken = semicolonToken, modifiers.parent = this, indexSignature.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.IndexMemberDeclarationSyntax.prototype.kind = 143 /* IndexMemberDeclaration */;
TypeScript.IndexMemberDeclarationSyntax.prototype.childCount = 3;
TypeScript.IndexMemberDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.indexSignature;
case 2: return this.semicolonToken;
}
};
TypeScript.GetAccessorSyntax = function (data, modifiers, getKeyword, propertyName, callSignature, block) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.getKeyword = getKeyword, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, modifiers.parent = this, getKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, block.parent = this;
};
TypeScript.GetAccessorSyntax.prototype.kind = 144 /* GetAccessor */;
TypeScript.GetAccessorSyntax.prototype.childCount = 5;
TypeScript.GetAccessorSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.getKeyword;
case 2: return this.propertyName;
case 3: return this.callSignature;
case 4: return this.block;
}
};
TypeScript.SetAccessorSyntax = function (data, modifiers, setKeyword, propertyName, callSignature, block) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.setKeyword = setKeyword, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, modifiers.parent = this, setKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, block.parent = this;
};
TypeScript.SetAccessorSyntax.prototype.kind = 145 /* SetAccessor */;
TypeScript.SetAccessorSyntax.prototype.childCount = 5;
TypeScript.SetAccessorSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.setKeyword;
case 2: return this.propertyName;
case 3: return this.callSignature;
case 4: return this.block;
}
};
TypeScript.PropertySignatureSyntax = function (data, propertyName, questionToken, typeAnnotation) {
if (data) {
this.__data = data;
}
this.propertyName = propertyName, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, propertyName.parent = this, questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this);
};
TypeScript.PropertySignatureSyntax.prototype.kind = 146 /* PropertySignature */;
TypeScript.PropertySignatureSyntax.prototype.childCount = 3;
TypeScript.PropertySignatureSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.propertyName;
case 1: return this.questionToken;
case 2: return this.typeAnnotation;
}
};
TypeScript.CallSignatureSyntax = function (data, typeParameterList, parameterList, typeAnnotation) {
if (data) {
this.__data = data;
}
this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.typeAnnotation = typeAnnotation, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, typeAnnotation && (typeAnnotation.parent = this);
};
TypeScript.CallSignatureSyntax.prototype.kind = 147 /* CallSignature */;
TypeScript.CallSignatureSyntax.prototype.childCount = 3;
TypeScript.CallSignatureSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.typeParameterList;
case 1: return this.parameterList;
case 2: return this.typeAnnotation;
}
};
TypeScript.ConstructSignatureSyntax = function (data, newKeyword, callSignature) {
if (data) {
this.__data = data;
}
this.newKeyword = newKeyword, this.callSignature = callSignature, newKeyword.parent = this, callSignature.parent = this;
};
TypeScript.ConstructSignatureSyntax.prototype.kind = 148 /* ConstructSignature */;
TypeScript.ConstructSignatureSyntax.prototype.childCount = 2;
TypeScript.ConstructSignatureSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.newKeyword;
case 1: return this.callSignature;
}
};
TypeScript.IndexSignatureSyntax = function (data, openBracketToken, parameters, closeBracketToken, typeAnnotation) {
if (data) {
this.__data = data;
}
this.openBracketToken = openBracketToken, this.parameters = parameters, this.closeBracketToken = closeBracketToken, this.typeAnnotation = typeAnnotation, openBracketToken.parent = this, parameters.parent = this, closeBracketToken.parent = this, typeAnnotation && (typeAnnotation.parent = this);
};
TypeScript.IndexSignatureSyntax.prototype.kind = 149 /* IndexSignature */;
TypeScript.IndexSignatureSyntax.prototype.childCount = 4;
TypeScript.IndexSignatureSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBracketToken;
case 1: return this.parameters;
case 2: return this.closeBracketToken;
case 3: return this.typeAnnotation;
}
};
TypeScript.MethodSignatureSyntax = function (data, propertyName, questionToken, callSignature) {
if (data) {
this.__data = data;
}
this.propertyName = propertyName, this.questionToken = questionToken, this.callSignature = callSignature, propertyName.parent = this, questionToken && (questionToken.parent = this), callSignature.parent = this;
};
TypeScript.MethodSignatureSyntax.prototype.kind = 150 /* MethodSignature */;
TypeScript.MethodSignatureSyntax.prototype.childCount = 3;
TypeScript.MethodSignatureSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.propertyName;
case 1: return this.questionToken;
case 2: return this.callSignature;
}
};
TypeScript.BlockSyntax = function (data, openBraceToken, statements, closeBraceToken) {
if (data) {
this.__data = data;
}
this.openBraceToken = openBraceToken, this.statements = statements, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, statements.parent = this, closeBraceToken.parent = this;
};
TypeScript.BlockSyntax.prototype.kind = 151 /* Block */;
TypeScript.BlockSyntax.prototype.childCount = 3;
TypeScript.BlockSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBraceToken;
case 1: return this.statements;
case 2: return this.closeBraceToken;
}
};
TypeScript.IfStatementSyntax = function (data, ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) {
if (data) {
this.__data = data;
}
this.ifKeyword = ifKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, this.elseClause = elseClause, ifKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this, elseClause && (elseClause.parent = this);
};
TypeScript.IfStatementSyntax.prototype.kind = 152 /* IfStatement */;
TypeScript.IfStatementSyntax.prototype.childCount = 6;
TypeScript.IfStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.ifKeyword;
case 1: return this.openParenToken;
case 2: return this.condition;
case 3: return this.closeParenToken;
case 4: return this.statement;
case 5: return this.elseClause;
}
};
TypeScript.VariableStatementSyntax = function (data, modifiers, variableDeclaration, semicolonToken) {
if (data) {
this.__data = data;
}
this.modifiers = modifiers, this.variableDeclaration = variableDeclaration, this.semicolonToken = semicolonToken, modifiers.parent = this, variableDeclaration.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.VariableStatementSyntax.prototype.kind = 153 /* VariableStatement */;
TypeScript.VariableStatementSyntax.prototype.childCount = 3;
TypeScript.VariableStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.modifiers;
case 1: return this.variableDeclaration;
case 2: return this.semicolonToken;
}
};
TypeScript.ExpressionStatementSyntax = function (data, expression, semicolonToken) {
if (data) {
this.__data = data;
}
this.expression = expression, this.semicolonToken = semicolonToken, expression.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.ExpressionStatementSyntax.prototype.kind = 154 /* ExpressionStatement */;
TypeScript.ExpressionStatementSyntax.prototype.childCount = 2;
TypeScript.ExpressionStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.expression;
case 1: return this.semicolonToken;
}
};
TypeScript.ReturnStatementSyntax = function (data, returnKeyword, expression, semicolonToken) {
if (data) {
this.__data = data;
}
this.returnKeyword = returnKeyword, this.expression = expression, this.semicolonToken = semicolonToken, returnKeyword.parent = this, expression && (expression.parent = this), semicolonToken && (semicolonToken.parent = this);
};
TypeScript.ReturnStatementSyntax.prototype.kind = 155 /* ReturnStatement */;
TypeScript.ReturnStatementSyntax.prototype.childCount = 3;
TypeScript.ReturnStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.returnKeyword;
case 1: return this.expression;
case 2: return this.semicolonToken;
}
};
TypeScript.SwitchStatementSyntax = function (data, switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) {
if (data) {
this.__data = data;
}
this.switchKeyword = switchKeyword, this.openParenToken = openParenToken, this.expression = expression, this.closeParenToken = closeParenToken, this.openBraceToken = openBraceToken, this.switchClauses = switchClauses, this.closeBraceToken = closeBraceToken, switchKeyword.parent = this, openParenToken.parent = this, expression.parent = this, closeParenToken.parent = this, openBraceToken.parent = this, switchClauses.parent = this, closeBraceToken.parent = this;
};
TypeScript.SwitchStatementSyntax.prototype.kind = 156 /* SwitchStatement */;
TypeScript.SwitchStatementSyntax.prototype.childCount = 7;
TypeScript.SwitchStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.switchKeyword;
case 1: return this.openParenToken;
case 2: return this.expression;
case 3: return this.closeParenToken;
case 4: return this.openBraceToken;
case 5: return this.switchClauses;
case 6: return this.closeBraceToken;
}
};
TypeScript.BreakStatementSyntax = function (data, breakKeyword, identifier, semicolonToken) {
if (data) {
this.__data = data;
}
this.breakKeyword = breakKeyword, this.identifier = identifier, this.semicolonToken = semicolonToken, breakKeyword.parent = this, identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this);
};
TypeScript.BreakStatementSyntax.prototype.kind = 157 /* BreakStatement */;
TypeScript.BreakStatementSyntax.prototype.childCount = 3;
TypeScript.BreakStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.breakKeyword;
case 1: return this.identifier;
case 2: return this.semicolonToken;
}
};
TypeScript.ContinueStatementSyntax = function (data, continueKeyword, identifier, semicolonToken) {
if (data) {
this.__data = data;
}
this.continueKeyword = continueKeyword, this.identifier = identifier, this.semicolonToken = semicolonToken, continueKeyword.parent = this, identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this);
};
TypeScript.ContinueStatementSyntax.prototype.kind = 158 /* ContinueStatement */;
TypeScript.ContinueStatementSyntax.prototype.childCount = 3;
TypeScript.ContinueStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.continueKeyword;
case 1: return this.identifier;
case 2: return this.semicolonToken;
}
};
TypeScript.ForStatementSyntax = function (data, forKeyword, openParenToken, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) {
if (data) {
this.__data = data;
}
this.forKeyword = forKeyword, this.openParenToken = openParenToken, this.initializer = initializer, this.firstSemicolonToken = firstSemicolonToken, this.condition = condition, this.secondSemicolonToken = secondSemicolonToken, this.incrementor = incrementor, this.closeParenToken = closeParenToken, this.statement = statement, forKeyword.parent = this, openParenToken.parent = this, initializer && (initializer.parent = this), firstSemicolonToken.parent = this, condition && (condition.parent = this), secondSemicolonToken.parent = this, incrementor && (incrementor.parent = this), closeParenToken.parent = this, statement.parent = this;
};
TypeScript.ForStatementSyntax.prototype.kind = 159 /* ForStatement */;
TypeScript.ForStatementSyntax.prototype.childCount = 9;
TypeScript.ForStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.forKeyword;
case 1: return this.openParenToken;
case 2: return this.initializer;
case 3: return this.firstSemicolonToken;
case 4: return this.condition;
case 5: return this.secondSemicolonToken;
case 6: return this.incrementor;
case 7: return this.closeParenToken;
case 8: return this.statement;
}
};
TypeScript.ForInStatementSyntax = function (data, forKeyword, openParenToken, left, inKeyword, right, closeParenToken, statement) {
if (data) {
this.__data = data;
}
this.forKeyword = forKeyword, this.openParenToken = openParenToken, this.left = left, this.inKeyword = inKeyword, this.right = right, this.closeParenToken = closeParenToken, this.statement = statement, forKeyword.parent = this, openParenToken.parent = this, left.parent = this, inKeyword.parent = this, right.parent = this, closeParenToken.parent = this, statement.parent = this;
};
TypeScript.ForInStatementSyntax.prototype.kind = 160 /* ForInStatement */;
TypeScript.ForInStatementSyntax.prototype.childCount = 7;
TypeScript.ForInStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.forKeyword;
case 1: return this.openParenToken;
case 2: return this.left;
case 3: return this.inKeyword;
case 4: return this.right;
case 5: return this.closeParenToken;
case 6: return this.statement;
}
};
TypeScript.EmptyStatementSyntax = function (data, semicolonToken) {
if (data) {
this.__data = data;
}
this.semicolonToken = semicolonToken, semicolonToken.parent = this;
};
TypeScript.EmptyStatementSyntax.prototype.kind = 161 /* EmptyStatement */;
TypeScript.EmptyStatementSyntax.prototype.childCount = 1;
TypeScript.EmptyStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.semicolonToken;
}
};
TypeScript.ThrowStatementSyntax = function (data, throwKeyword, expression, semicolonToken) {
if (data) {
this.__data = data;
}
this.throwKeyword = throwKeyword, this.expression = expression, this.semicolonToken = semicolonToken, throwKeyword.parent = this, expression.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.ThrowStatementSyntax.prototype.kind = 162 /* ThrowStatement */;
TypeScript.ThrowStatementSyntax.prototype.childCount = 3;
TypeScript.ThrowStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.throwKeyword;
case 1: return this.expression;
case 2: return this.semicolonToken;
}
};
TypeScript.WhileStatementSyntax = function (data, whileKeyword, openParenToken, condition, closeParenToken, statement) {
if (data) {
this.__data = data;
}
this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, whileKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this;
};
TypeScript.WhileStatementSyntax.prototype.kind = 163 /* WhileStatement */;
TypeScript.WhileStatementSyntax.prototype.childCount = 5;
TypeScript.WhileStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.whileKeyword;
case 1: return this.openParenToken;
case 2: return this.condition;
case 3: return this.closeParenToken;
case 4: return this.statement;
}
};
TypeScript.TryStatementSyntax = function (data, tryKeyword, block, catchClause, finallyClause) {
if (data) {
this.__data = data;
}
this.tryKeyword = tryKeyword, this.block = block, this.catchClause = catchClause, this.finallyClause = finallyClause, tryKeyword.parent = this, block.parent = this, catchClause && (catchClause.parent = this), finallyClause && (finallyClause.parent = this);
};
TypeScript.TryStatementSyntax.prototype.kind = 164 /* TryStatement */;
TypeScript.TryStatementSyntax.prototype.childCount = 4;
TypeScript.TryStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.tryKeyword;
case 1: return this.block;
case 2: return this.catchClause;
case 3: return this.finallyClause;
}
};
TypeScript.LabeledStatementSyntax = function (data, identifier, colonToken, statement) {
if (data) {
this.__data = data;
}
this.identifier = identifier, this.colonToken = colonToken, this.statement = statement, identifier.parent = this, colonToken.parent = this, statement.parent = this;
};
TypeScript.LabeledStatementSyntax.prototype.kind = 165 /* LabeledStatement */;
TypeScript.LabeledStatementSyntax.prototype.childCount = 3;
TypeScript.LabeledStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.identifier;
case 1: return this.colonToken;
case 2: return this.statement;
}
};
TypeScript.DoStatementSyntax = function (data, doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) {
if (data) {
this.__data = data;
}
this.doKeyword = doKeyword, this.statement = statement, this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.semicolonToken = semicolonToken, doKeyword.parent = this, statement.parent = this, whileKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.DoStatementSyntax.prototype.kind = 166 /* DoStatement */;
TypeScript.DoStatementSyntax.prototype.childCount = 7;
TypeScript.DoStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.doKeyword;
case 1: return this.statement;
case 2: return this.whileKeyword;
case 3: return this.openParenToken;
case 4: return this.condition;
case 5: return this.closeParenToken;
case 6: return this.semicolonToken;
}
};
TypeScript.DebuggerStatementSyntax = function (data, debuggerKeyword, semicolonToken) {
if (data) {
this.__data = data;
}
this.debuggerKeyword = debuggerKeyword, this.semicolonToken = semicolonToken, debuggerKeyword.parent = this, semicolonToken && (semicolonToken.parent = this);
};
TypeScript.DebuggerStatementSyntax.prototype.kind = 167 /* DebuggerStatement */;
TypeScript.DebuggerStatementSyntax.prototype.childCount = 2;
TypeScript.DebuggerStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.debuggerKeyword;
case 1: return this.semicolonToken;
}
};
TypeScript.WithStatementSyntax = function (data, withKeyword, openParenToken, condition, closeParenToken, statement) {
if (data) {
this.__data = data;
}
this.withKeyword = withKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, withKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this;
};
TypeScript.WithStatementSyntax.prototype.kind = 168 /* WithStatement */;
TypeScript.WithStatementSyntax.prototype.childCount = 5;
TypeScript.WithStatementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.withKeyword;
case 1: return this.openParenToken;
case 2: return this.condition;
case 3: return this.closeParenToken;
case 4: return this.statement;
}
};
TypeScript.PrefixUnaryExpressionSyntax = function (data, operatorToken, operand) {
if (data) {
this.__data = data;
}
this.operatorToken = operatorToken, this.operand = operand, operatorToken.parent = this, operand.parent = this;
};
TypeScript.PrefixUnaryExpressionSyntax.prototype.kind = 169 /* PrefixUnaryExpression */;
TypeScript.PrefixUnaryExpressionSyntax.prototype.childCount = 2;
TypeScript.PrefixUnaryExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.operatorToken;
case 1: return this.operand;
}
};
TypeScript.DeleteExpressionSyntax = function (data, deleteKeyword, expression) {
if (data) {
this.__data = data;
}
this.deleteKeyword = deleteKeyword, this.expression = expression, deleteKeyword.parent = this, expression.parent = this;
};
TypeScript.DeleteExpressionSyntax.prototype.kind = 170 /* DeleteExpression */;
TypeScript.DeleteExpressionSyntax.prototype.childCount = 2;
TypeScript.DeleteExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.deleteKeyword;
case 1: return this.expression;
}
};
TypeScript.TypeOfExpressionSyntax = function (data, typeOfKeyword, expression) {
if (data) {
this.__data = data;
}
this.typeOfKeyword = typeOfKeyword, this.expression = expression, typeOfKeyword.parent = this, expression.parent = this;
};
TypeScript.TypeOfExpressionSyntax.prototype.kind = 171 /* TypeOfExpression */;
TypeScript.TypeOfExpressionSyntax.prototype.childCount = 2;
TypeScript.TypeOfExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.typeOfKeyword;
case 1: return this.expression;
}
};
TypeScript.VoidExpressionSyntax = function (data, voidKeyword, expression) {
if (data) {
this.__data = data;
}
this.voidKeyword = voidKeyword, this.expression = expression, voidKeyword.parent = this, expression.parent = this;
};
TypeScript.VoidExpressionSyntax.prototype.kind = 172 /* VoidExpression */;
TypeScript.VoidExpressionSyntax.prototype.childCount = 2;
TypeScript.VoidExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.voidKeyword;
case 1: return this.expression;
}
};
TypeScript.ConditionalExpressionSyntax = function (data, condition, questionToken, whenTrue, colonToken, whenFalse) {
if (data) {
this.__data = data;
}
this.condition = condition, this.questionToken = questionToken, this.whenTrue = whenTrue, this.colonToken = colonToken, this.whenFalse = whenFalse, condition.parent = this, questionToken.parent = this, whenTrue.parent = this, colonToken.parent = this, whenFalse.parent = this;
};
TypeScript.ConditionalExpressionSyntax.prototype.kind = 173 /* ConditionalExpression */;
TypeScript.ConditionalExpressionSyntax.prototype.childCount = 5;
TypeScript.ConditionalExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.condition;
case 1: return this.questionToken;
case 2: return this.whenTrue;
case 3: return this.colonToken;
case 4: return this.whenFalse;
}
};
TypeScript.BinaryExpressionSyntax = function (data, left, operatorToken, right) {
if (data) {
this.__data = data;
}
this.left = left, this.operatorToken = operatorToken, this.right = right, left.parent = this, operatorToken.parent = this, right.parent = this;
};
TypeScript.BinaryExpressionSyntax.prototype.kind = 174 /* BinaryExpression */;
TypeScript.BinaryExpressionSyntax.prototype.childCount = 3;
TypeScript.BinaryExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.left;
case 1: return this.operatorToken;
case 2: return this.right;
}
};
TypeScript.PostfixUnaryExpressionSyntax = function (data, operand, operatorToken) {
if (data) {
this.__data = data;
}
this.operand = operand, this.operatorToken = operatorToken, operand.parent = this, operatorToken.parent = this;
};
TypeScript.PostfixUnaryExpressionSyntax.prototype.kind = 175 /* PostfixUnaryExpression */;
TypeScript.PostfixUnaryExpressionSyntax.prototype.childCount = 2;
TypeScript.PostfixUnaryExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.operand;
case 1: return this.operatorToken;
}
};
TypeScript.MemberAccessExpressionSyntax = function (data, expression, dotToken, name) {
if (data) {
this.__data = data;
}
this.expression = expression, this.dotToken = dotToken, this.name = name, expression.parent = this, dotToken.parent = this, name.parent = this;
};
TypeScript.MemberAccessExpressionSyntax.prototype.kind = 176 /* MemberAccessExpression */;
TypeScript.MemberAccessExpressionSyntax.prototype.childCount = 3;
TypeScript.MemberAccessExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.expression;
case 1: return this.dotToken;
case 2: return this.name;
}
};
TypeScript.InvocationExpressionSyntax = function (data, expression, argumentList) {
if (data) {
this.__data = data;
}
this.expression = expression, this.argumentList = argumentList, expression.parent = this, argumentList.parent = this;
};
TypeScript.InvocationExpressionSyntax.prototype.kind = 177 /* InvocationExpression */;
TypeScript.InvocationExpressionSyntax.prototype.childCount = 2;
TypeScript.InvocationExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.expression;
case 1: return this.argumentList;
}
};
TypeScript.ArrayLiteralExpressionSyntax = function (data, openBracketToken, expressions, closeBracketToken) {
if (data) {
this.__data = data;
}
this.openBracketToken = openBracketToken, this.expressions = expressions, this.closeBracketToken = closeBracketToken, openBracketToken.parent = this, expressions.parent = this, closeBracketToken.parent = this;
};
TypeScript.ArrayLiteralExpressionSyntax.prototype.kind = 178 /* ArrayLiteralExpression */;
TypeScript.ArrayLiteralExpressionSyntax.prototype.childCount = 3;
TypeScript.ArrayLiteralExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBracketToken;
case 1: return this.expressions;
case 2: return this.closeBracketToken;
}
};
TypeScript.ObjectLiteralExpressionSyntax = function (data, openBraceToken, propertyAssignments, closeBraceToken) {
if (data) {
this.__data = data;
}
this.openBraceToken = openBraceToken, this.propertyAssignments = propertyAssignments, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, propertyAssignments.parent = this, closeBraceToken.parent = this;
};
TypeScript.ObjectLiteralExpressionSyntax.prototype.kind = 179 /* ObjectLiteralExpression */;
TypeScript.ObjectLiteralExpressionSyntax.prototype.childCount = 3;
TypeScript.ObjectLiteralExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBraceToken;
case 1: return this.propertyAssignments;
case 2: return this.closeBraceToken;
}
};
TypeScript.ObjectCreationExpressionSyntax = function (data, newKeyword, expression, argumentList) {
if (data) {
this.__data = data;
}
this.newKeyword = newKeyword, this.expression = expression, this.argumentList = argumentList, newKeyword.parent = this, expression.parent = this, argumentList && (argumentList.parent = this);
};
TypeScript.ObjectCreationExpressionSyntax.prototype.kind = 180 /* ObjectCreationExpression */;
TypeScript.ObjectCreationExpressionSyntax.prototype.childCount = 3;
TypeScript.ObjectCreationExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.newKeyword;
case 1: return this.expression;
case 2: return this.argumentList;
}
};
TypeScript.ParenthesizedExpressionSyntax = function (data, openParenToken, expression, closeParenToken) {
if (data) {
this.__data = data;
}
this.openParenToken = openParenToken, this.expression = expression, this.closeParenToken = closeParenToken, openParenToken.parent = this, expression.parent = this, closeParenToken.parent = this;
};
TypeScript.ParenthesizedExpressionSyntax.prototype.kind = 181 /* ParenthesizedExpression */;
TypeScript.ParenthesizedExpressionSyntax.prototype.childCount = 3;
TypeScript.ParenthesizedExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openParenToken;
case 1: return this.expression;
case 2: return this.closeParenToken;
}
};
TypeScript.ParenthesizedArrowFunctionExpressionSyntax = function (data, callSignature, equalsGreaterThanToken, body) {
if (data) {
this.__data = data;
}
this.callSignature = callSignature, this.equalsGreaterThanToken = equalsGreaterThanToken, this.body = body, callSignature.parent = this, equalsGreaterThanToken.parent = this, body.parent = this;
};
TypeScript.ParenthesizedArrowFunctionExpressionSyntax.prototype.kind = 182 /* ParenthesizedArrowFunctionExpression */;
TypeScript.ParenthesizedArrowFunctionExpressionSyntax.prototype.childCount = 3;
TypeScript.ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.callSignature;
case 1: return this.equalsGreaterThanToken;
case 2: return this.body;
}
};
TypeScript.SimpleArrowFunctionExpressionSyntax = function (data, parameter, equalsGreaterThanToken, body) {
if (data) {
this.__data = data;
}
this.parameter = parameter, this.equalsGreaterThanToken = equalsGreaterThanToken, this.body = body, parameter.parent = this, equalsGreaterThanToken.parent = this, body.parent = this;
};
TypeScript.SimpleArrowFunctionExpressionSyntax.prototype.kind = 183 /* SimpleArrowFunctionExpression */;
TypeScript.SimpleArrowFunctionExpressionSyntax.prototype.childCount = 3;
TypeScript.SimpleArrowFunctionExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.parameter;
case 1: return this.equalsGreaterThanToken;
case 2: return this.body;
}
};
TypeScript.CastExpressionSyntax = function (data, lessThanToken, type, greaterThanToken, expression) {
if (data) {
this.__data = data;
}
this.lessThanToken = lessThanToken, this.type = type, this.greaterThanToken = greaterThanToken, this.expression = expression, lessThanToken.parent = this, type.parent = this, greaterThanToken.parent = this, expression.parent = this;
};
TypeScript.CastExpressionSyntax.prototype.kind = 184 /* CastExpression */;
TypeScript.CastExpressionSyntax.prototype.childCount = 4;
TypeScript.CastExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.lessThanToken;
case 1: return this.type;
case 2: return this.greaterThanToken;
case 3: return this.expression;
}
};
TypeScript.ElementAccessExpressionSyntax = function (data, expression, openBracketToken, argumentExpression, closeBracketToken) {
if (data) {
this.__data = data;
}
this.expression = expression, this.openBracketToken = openBracketToken, this.argumentExpression = argumentExpression, this.closeBracketToken = closeBracketToken, expression.parent = this, openBracketToken.parent = this, argumentExpression.parent = this, closeBracketToken.parent = this;
};
TypeScript.ElementAccessExpressionSyntax.prototype.kind = 185 /* ElementAccessExpression */;
TypeScript.ElementAccessExpressionSyntax.prototype.childCount = 4;
TypeScript.ElementAccessExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.expression;
case 1: return this.openBracketToken;
case 2: return this.argumentExpression;
case 3: return this.closeBracketToken;
}
};
TypeScript.FunctionExpressionSyntax = function (data, functionKeyword, identifier, callSignature, block) {
if (data) {
this.__data = data;
}
this.functionKeyword = functionKeyword, this.identifier = identifier, this.callSignature = callSignature, this.block = block, functionKeyword.parent = this, identifier && (identifier.parent = this), callSignature.parent = this, block.parent = this;
};
TypeScript.FunctionExpressionSyntax.prototype.kind = 186 /* FunctionExpression */;
TypeScript.FunctionExpressionSyntax.prototype.childCount = 4;
TypeScript.FunctionExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.functionKeyword;
case 1: return this.identifier;
case 2: return this.callSignature;
case 3: return this.block;
}
};
TypeScript.OmittedExpressionSyntax = function (data) {
if (data) {
this.__data = data;
}
};
TypeScript.OmittedExpressionSyntax.prototype.kind = 187 /* OmittedExpression */;
TypeScript.OmittedExpressionSyntax.prototype.childCount = 0;
TypeScript.OmittedExpressionSyntax.prototype.childAt = function (index) {
throw TypeScript.Errors.invalidOperation();
};
TypeScript.TemplateExpressionSyntax = function (data, templateStartToken, templateClauses) {
if (data) {
this.__data = data;
}
this.templateStartToken = templateStartToken, this.templateClauses = templateClauses, templateStartToken.parent = this, templateClauses.parent = this;
};
TypeScript.TemplateExpressionSyntax.prototype.kind = 188 /* TemplateExpression */;
TypeScript.TemplateExpressionSyntax.prototype.childCount = 2;
TypeScript.TemplateExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.templateStartToken;
case 1: return this.templateClauses;
}
};
TypeScript.TemplateAccessExpressionSyntax = function (data, expression, templateExpression) {
if (data) {
this.__data = data;
}
this.expression = expression, this.templateExpression = templateExpression, expression.parent = this, templateExpression.parent = this;
};
TypeScript.TemplateAccessExpressionSyntax.prototype.kind = 189 /* TemplateAccessExpression */;
TypeScript.TemplateAccessExpressionSyntax.prototype.childCount = 2;
TypeScript.TemplateAccessExpressionSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.expression;
case 1: return this.templateExpression;
}
};
TypeScript.VariableDeclarationSyntax = function (data, varKeyword, variableDeclarators) {
if (data) {
this.__data = data;
}
this.varKeyword = varKeyword, this.variableDeclarators = variableDeclarators, varKeyword.parent = this, variableDeclarators.parent = this;
};
TypeScript.VariableDeclarationSyntax.prototype.kind = 190 /* VariableDeclaration */;
TypeScript.VariableDeclarationSyntax.prototype.childCount = 2;
TypeScript.VariableDeclarationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.varKeyword;
case 1: return this.variableDeclarators;
}
};
TypeScript.VariableDeclaratorSyntax = function (data, propertyName, typeAnnotation, equalsValueClause) {
if (data) {
this.__data = data;
}
this.propertyName = propertyName, this.typeAnnotation = typeAnnotation, this.equalsValueClause = equalsValueClause, propertyName.parent = this, typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this);
};
TypeScript.VariableDeclaratorSyntax.prototype.kind = 191 /* VariableDeclarator */;
TypeScript.VariableDeclaratorSyntax.prototype.childCount = 3;
TypeScript.VariableDeclaratorSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.propertyName;
case 1: return this.typeAnnotation;
case 2: return this.equalsValueClause;
}
};
TypeScript.ArgumentListSyntax = function (data, typeArgumentList, openParenToken, _arguments, closeParenToken) {
if (data) {
this.__data = data;
}
this.typeArgumentList = typeArgumentList, this.openParenToken = openParenToken, this.arguments = _arguments, this.closeParenToken = closeParenToken, typeArgumentList && (typeArgumentList.parent = this), openParenToken.parent = this, _arguments.parent = this, closeParenToken.parent = this;
};
TypeScript.ArgumentListSyntax.prototype.kind = 192 /* ArgumentList */;
TypeScript.ArgumentListSyntax.prototype.childCount = 4;
TypeScript.ArgumentListSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.typeArgumentList;
case 1: return this.openParenToken;
case 2: return this.arguments;
case 3: return this.closeParenToken;
}
};
TypeScript.ParameterListSyntax = function (data, openParenToken, parameters, closeParenToken) {
if (data) {
this.__data = data;
}
this.openParenToken = openParenToken, this.parameters = parameters, this.closeParenToken = closeParenToken, openParenToken.parent = this, parameters.parent = this, closeParenToken.parent = this;
};
TypeScript.ParameterListSyntax.prototype.kind = 193 /* ParameterList */;
TypeScript.ParameterListSyntax.prototype.childCount = 3;
TypeScript.ParameterListSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openParenToken;
case 1: return this.parameters;
case 2: return this.closeParenToken;
}
};
TypeScript.TypeArgumentListSyntax = function (data, lessThanToken, typeArguments, greaterThanToken) {
if (data) {
this.__data = data;
}
this.lessThanToken = lessThanToken, this.typeArguments = typeArguments, this.greaterThanToken = greaterThanToken, lessThanToken.parent = this, typeArguments.parent = this, greaterThanToken.parent = this;
};
TypeScript.TypeArgumentListSyntax.prototype.kind = 194 /* TypeArgumentList */;
TypeScript.TypeArgumentListSyntax.prototype.childCount = 3;
TypeScript.TypeArgumentListSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.lessThanToken;
case 1: return this.typeArguments;
case 2: return this.greaterThanToken;
}
};
TypeScript.TypeParameterListSyntax = function (data, lessThanToken, typeParameters, greaterThanToken) {
if (data) {
this.__data = data;
}
this.lessThanToken = lessThanToken, this.typeParameters = typeParameters, this.greaterThanToken = greaterThanToken, lessThanToken.parent = this, typeParameters.parent = this, greaterThanToken.parent = this;
};
TypeScript.TypeParameterListSyntax.prototype.kind = 195 /* TypeParameterList */;
TypeScript.TypeParameterListSyntax.prototype.childCount = 3;
TypeScript.TypeParameterListSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.lessThanToken;
case 1: return this.typeParameters;
case 2: return this.greaterThanToken;
}
};
TypeScript.HeritageClauseSyntax = function (data, extendsOrImplementsKeyword, typeNames) {
if (data) {
this.__data = data;
}
this.extendsOrImplementsKeyword = extendsOrImplementsKeyword, this.typeNames = typeNames, extendsOrImplementsKeyword.parent = this, typeNames.parent = this;
};
TypeScript.HeritageClauseSyntax.prototype.kind = 196 /* HeritageClause */;
TypeScript.HeritageClauseSyntax.prototype.childCount = 2;
TypeScript.HeritageClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.extendsOrImplementsKeyword;
case 1: return this.typeNames;
}
};
TypeScript.EqualsValueClauseSyntax = function (data, equalsToken, value) {
if (data) {
this.__data = data;
}
this.equalsToken = equalsToken, this.value = value, equalsToken.parent = this, value.parent = this;
};
TypeScript.EqualsValueClauseSyntax.prototype.kind = 197 /* EqualsValueClause */;
TypeScript.EqualsValueClauseSyntax.prototype.childCount = 2;
TypeScript.EqualsValueClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.equalsToken;
case 1: return this.value;
}
};
TypeScript.CaseSwitchClauseSyntax = function (data, caseKeyword, expression, colonToken, statements) {
if (data) {
this.__data = data;
}
this.caseKeyword = caseKeyword, this.expression = expression, this.colonToken = colonToken, this.statements = statements, caseKeyword.parent = this, expression.parent = this, colonToken.parent = this, statements.parent = this;
};
TypeScript.CaseSwitchClauseSyntax.prototype.kind = 198 /* CaseSwitchClause */;
TypeScript.CaseSwitchClauseSyntax.prototype.childCount = 4;
TypeScript.CaseSwitchClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.caseKeyword;
case 1: return this.expression;
case 2: return this.colonToken;
case 3: return this.statements;
}
};
TypeScript.DefaultSwitchClauseSyntax = function (data, defaultKeyword, colonToken, statements) {
if (data) {
this.__data = data;
}
this.defaultKeyword = defaultKeyword, this.colonToken = colonToken, this.statements = statements, defaultKeyword.parent = this, colonToken.parent = this, statements.parent = this;
};
TypeScript.DefaultSwitchClauseSyntax.prototype.kind = 199 /* DefaultSwitchClause */;
TypeScript.DefaultSwitchClauseSyntax.prototype.childCount = 3;
TypeScript.DefaultSwitchClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.defaultKeyword;
case 1: return this.colonToken;
case 2: return this.statements;
}
};
TypeScript.ElseClauseSyntax = function (data, elseKeyword, statement) {
if (data) {
this.__data = data;
}
this.elseKeyword = elseKeyword, this.statement = statement, elseKeyword.parent = this, statement.parent = this;
};
TypeScript.ElseClauseSyntax.prototype.kind = 200 /* ElseClause */;
TypeScript.ElseClauseSyntax.prototype.childCount = 2;
TypeScript.ElseClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.elseKeyword;
case 1: return this.statement;
}
};
TypeScript.CatchClauseSyntax = function (data, catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) {
if (data) {
this.__data = data;
}
this.catchKeyword = catchKeyword, this.openParenToken = openParenToken, this.identifier = identifier, this.typeAnnotation = typeAnnotation, this.closeParenToken = closeParenToken, this.block = block, catchKeyword.parent = this, openParenToken.parent = this, identifier.parent = this, typeAnnotation && (typeAnnotation.parent = this), closeParenToken.parent = this, block.parent = this;
};
TypeScript.CatchClauseSyntax.prototype.kind = 201 /* CatchClause */;
TypeScript.CatchClauseSyntax.prototype.childCount = 6;
TypeScript.CatchClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.catchKeyword;
case 1: return this.openParenToken;
case 2: return this.identifier;
case 3: return this.typeAnnotation;
case 4: return this.closeParenToken;
case 5: return this.block;
}
};
TypeScript.FinallyClauseSyntax = function (data, finallyKeyword, block) {
if (data) {
this.__data = data;
}
this.finallyKeyword = finallyKeyword, this.block = block, finallyKeyword.parent = this, block.parent = this;
};
TypeScript.FinallyClauseSyntax.prototype.kind = 202 /* FinallyClause */;
TypeScript.FinallyClauseSyntax.prototype.childCount = 2;
TypeScript.FinallyClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.finallyKeyword;
case 1: return this.block;
}
};
TypeScript.TemplateClauseSyntax = function (data, expression, templateMiddleOrEndToken) {
if (data) {
this.__data = data;
}
this.expression = expression, this.templateMiddleOrEndToken = templateMiddleOrEndToken, expression.parent = this, templateMiddleOrEndToken.parent = this;
};
TypeScript.TemplateClauseSyntax.prototype.kind = 203 /* TemplateClause */;
TypeScript.TemplateClauseSyntax.prototype.childCount = 2;
TypeScript.TemplateClauseSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.expression;
case 1: return this.templateMiddleOrEndToken;
}
};
TypeScript.TypeParameterSyntax = function (data, identifier, constraint) {
if (data) {
this.__data = data;
}
this.identifier = identifier, this.constraint = constraint, identifier.parent = this, constraint && (constraint.parent = this);
};
TypeScript.TypeParameterSyntax.prototype.kind = 204 /* TypeParameter */;
TypeScript.TypeParameterSyntax.prototype.childCount = 2;
TypeScript.TypeParameterSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.identifier;
case 1: return this.constraint;
}
};
TypeScript.ConstraintSyntax = function (data, extendsKeyword, typeOrExpression) {
if (data) {
this.__data = data;
}
this.extendsKeyword = extendsKeyword, this.typeOrExpression = typeOrExpression, extendsKeyword.parent = this, typeOrExpression.parent = this;
};
TypeScript.ConstraintSyntax.prototype.kind = 205 /* Constraint */;
TypeScript.ConstraintSyntax.prototype.childCount = 2;
TypeScript.ConstraintSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.extendsKeyword;
case 1: return this.typeOrExpression;
}
};
TypeScript.SimplePropertyAssignmentSyntax = function (data, propertyName, colonToken, expression) {
if (data) {
this.__data = data;
}
this.propertyName = propertyName, this.colonToken = colonToken, this.expression = expression, propertyName.parent = this, colonToken.parent = this, expression.parent = this;
};
TypeScript.SimplePropertyAssignmentSyntax.prototype.kind = 206 /* SimplePropertyAssignment */;
TypeScript.SimplePropertyAssignmentSyntax.prototype.childCount = 3;
TypeScript.SimplePropertyAssignmentSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.propertyName;
case 1: return this.colonToken;
case 2: return this.expression;
}
};
TypeScript.FunctionPropertyAssignmentSyntax = function (data, propertyName, callSignature, block) {
if (data) {
this.__data = data;
}
this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, propertyName.parent = this, callSignature.parent = this, block.parent = this;
};
TypeScript.FunctionPropertyAssignmentSyntax.prototype.kind = 207 /* FunctionPropertyAssignment */;
TypeScript.FunctionPropertyAssignmentSyntax.prototype.childCount = 3;
TypeScript.FunctionPropertyAssignmentSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.propertyName;
case 1: return this.callSignature;
case 2: return this.block;
}
};
TypeScript.ParameterSyntax = function (data, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) {
if (data) {
this.__data = data;
}
this.dotDotDotToken = dotDotDotToken, this.modifiers = modifiers, this.identifier = identifier, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, this.equalsValueClause = equalsValueClause, dotDotDotToken && (dotDotDotToken.parent = this), modifiers.parent = this, identifier.parent = this, questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this);
};
TypeScript.ParameterSyntax.prototype.kind = 208 /* Parameter */;
TypeScript.ParameterSyntax.prototype.childCount = 6;
TypeScript.ParameterSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.dotDotDotToken;
case 1: return this.modifiers;
case 2: return this.identifier;
case 3: return this.questionToken;
case 4: return this.typeAnnotation;
case 5: return this.equalsValueClause;
}
};
TypeScript.EnumElementSyntax = function (data, propertyName, equalsValueClause) {
if (data) {
this.__data = data;
}
this.propertyName = propertyName, this.equalsValueClause = equalsValueClause, propertyName.parent = this, equalsValueClause && (equalsValueClause.parent = this);
};
TypeScript.EnumElementSyntax.prototype.kind = 209 /* EnumElement */;
TypeScript.EnumElementSyntax.prototype.childCount = 2;
TypeScript.EnumElementSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.propertyName;
case 1: return this.equalsValueClause;
}
};
TypeScript.TypeAnnotationSyntax = function (data, colonToken, type) {
if (data) {
this.__data = data;
}
this.colonToken = colonToken, this.type = type, colonToken.parent = this, type.parent = this;
};
TypeScript.TypeAnnotationSyntax.prototype.kind = 210 /* TypeAnnotation */;
TypeScript.TypeAnnotationSyntax.prototype.childCount = 2;
TypeScript.TypeAnnotationSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.colonToken;
case 1: return this.type;
}
};
TypeScript.ComputedPropertyNameSyntax = function (data, openBracketToken, expression, closeBracketToken) {
if (data) {
this.__data = data;
}
this.openBracketToken = openBracketToken, this.expression = expression, this.closeBracketToken = closeBracketToken, openBracketToken.parent = this, expression.parent = this, closeBracketToken.parent = this;
};
TypeScript.ComputedPropertyNameSyntax.prototype.kind = 211 /* ComputedPropertyName */;
TypeScript.ComputedPropertyNameSyntax.prototype.childCount = 3;
TypeScript.ComputedPropertyNameSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.openBracketToken;
case 1: return this.expression;
case 2: return this.closeBracketToken;
}
};
TypeScript.ExternalModuleReferenceSyntax = function (data, requireKeyword, openParenToken, stringLiteral, closeParenToken) {
if (data) {
this.__data = data;
}
this.requireKeyword = requireKeyword, this.openParenToken = openParenToken, this.stringLiteral = stringLiteral, this.closeParenToken = closeParenToken, requireKeyword.parent = this, openParenToken.parent = this, stringLiteral.parent = this, closeParenToken.parent = this;
};
TypeScript.ExternalModuleReferenceSyntax.prototype.kind = 212 /* ExternalModuleReference */;
TypeScript.ExternalModuleReferenceSyntax.prototype.childCount = 4;
TypeScript.ExternalModuleReferenceSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.requireKeyword;
case 1: return this.openParenToken;
case 2: return this.stringLiteral;
case 3: return this.closeParenToken;
}
};
TypeScript.ModuleNameModuleReferenceSyntax = function (data, moduleName) {
if (data) {
this.__data = data;
}
this.moduleName = moduleName, moduleName.parent = this;
};
TypeScript.ModuleNameModuleReferenceSyntax.prototype.kind = 213 /* ModuleNameModuleReference */;
TypeScript.ModuleNameModuleReferenceSyntax.prototype.childCount = 1;
TypeScript.ModuleNameModuleReferenceSyntax.prototype.childAt = function (index) {
switch (index) {
case 0: return this.moduleName;
}
};
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
TypeScript.syntaxDiagnosticsTime = 0;
var SyntaxTree = (function () {
function SyntaxTree(sourceUnit, isDeclaration, diagnostics, fileName, text, languageVersion) {
this.text = text;
this._allDiagnostics = undefined;
this._sourceUnit = sourceUnit;
this._isDeclaration = isDeclaration;
this._parserDiagnostics = diagnostics;
this._fileName = fileName;
this._lineMap = text.lineMap();
this._languageVersion = languageVersion;
sourceUnit.syntaxTree = this;
}
SyntaxTree.prototype.sourceUnit = function () {
return this._sourceUnit;
};
SyntaxTree.prototype.isDeclaration = function () {
return this._isDeclaration;
};
SyntaxTree.prototype.computeDiagnostics = function () {
if (this._parserDiagnostics.length > 0) {
return this._parserDiagnostics;
}
var diagnostics = [];
TypeScript.visitNodeOrToken(new GrammarCheckerWalker(this, diagnostics), this.sourceUnit());
return diagnostics;
};
SyntaxTree.prototype.diagnostics = function () {
if (!this._allDiagnostics) {
var start = new Date().getTime();
this._allDiagnostics = this.computeDiagnostics();
TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start;
}
return this._allDiagnostics;
};
SyntaxTree.prototype.fileName = function () {
return this._fileName;
};
SyntaxTree.prototype.lineMap = function () {
return this._lineMap;
};
SyntaxTree.prototype.languageVersion = function () {
return this._languageVersion;
};
SyntaxTree.prototype.cacheSyntaxTreeInfo = function () {
var firstToken = firstSyntaxTreeToken(this);
var leadingTrivia = firstToken.leadingTrivia(this.text);
this._isExternalModule = !!externalModuleIndicatorSpanWorker(this, firstToken);
var amdDependencies = [];
for (var i = 0, n = leadingTrivia.count(); i < n; i++) {
var trivia = leadingTrivia.syntaxTriviaAt(i);
if (trivia.isComment()) {
var amdDependency = this.getAmdDependency(trivia.fullText());
if (amdDependency) {
amdDependencies.push(amdDependency);
}
}
}
this._amdDependencies = amdDependencies;
};
SyntaxTree.prototype.getAmdDependency = function (comment) {
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s+path=('|")(.+?)\1/gim;
var match = amdDependencyRegEx.exec(comment);
return match ? match[2] : undefined;
};
SyntaxTree.prototype.isExternalModule = function () {
if (this._isExternalModule === undefined) {
this.cacheSyntaxTreeInfo();
TypeScript.Debug.assert(this._isExternalModule !== undefined);
}
return this._isExternalModule;
};
SyntaxTree.prototype.amdDependencies = function () {
if (this._amdDependencies === undefined) {
this.cacheSyntaxTreeInfo();
TypeScript.Debug.assert(this._amdDependencies !== undefined);
}
return this._amdDependencies;
};
return SyntaxTree;
})();
TypeScript.SyntaxTree = SyntaxTree;
var GrammarCheckerWalker = (function (_super) {
__extends(GrammarCheckerWalker, _super);
function GrammarCheckerWalker(syntaxTree, diagnostics) {
_super.call(this);
this.syntaxTree = syntaxTree;
this.diagnostics = diagnostics;
this.inAmbientDeclaration = false;
this.inBlock = false;
this.inObjectLiteralExpression = false;
this.text = syntaxTree.text;
}
GrammarCheckerWalker.prototype.pushDiagnostic = function (element, diagnosticKey, args) {
this.diagnostics.push(new TypeScript.Diagnostic(this.syntaxTree.fileName(), this.syntaxTree.lineMap(), TypeScript.start(element, this.text), TypeScript.width(element), diagnosticKey, args));
};
GrammarCheckerWalker.prototype.visitCatchClause = function (node) {
if (this.checkForCatchClauseTypeAnnotation(node) || this.checkForDisallowedEvalOrArguments(node, node.identifier)) {
return;
}
_super.prototype.visitCatchClause.call(this, node);
};
GrammarCheckerWalker.prototype.checkForCatchClauseTypeAnnotation = function (node) {
if (node.typeAnnotation) {
this.pushDiagnostic(node.typeAnnotation.colonToken, TypeScript.DiagnosticCode.Catch_clause_parameter_cannot_have_a_type_annotation);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterListOrder = function (node) {
var seenOptionalParameter = false;
var parameterCount = TypeScript.nonSeparatorCount(node.parameters);
for (var i = 0; i < parameterCount; i++) {
var parameter = TypeScript.nonSeparatorAt(node.parameters, i);
if (parameter.dotDotDotToken) {
if (i !== (parameterCount - 1)) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list);
return true;
}
if (parameter.questionToken) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.A_rest_parameter_cannot_be_optional);
return true;
}
if (parameter.equalsValueClause) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer);
return true;
}
}
else if (parameter.questionToken || parameter.equalsValueClause) {
seenOptionalParameter = true;
if (parameter.questionToken && parameter.equalsValueClause) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer);
return true;
}
}
else {
if (seenOptionalParameter) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter);
return true;
}
}
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterListAcessibilityModifiers = function (node) {
for (var i = 0, n = TypeScript.nonSeparatorCount(node.parameters); i < n; i++) {
var parameter = TypeScript.nonSeparatorAt(node.parameters, i);
if (this.checkParameterAccessibilityModifiers(node, parameter)) {
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterAccessibilityModifiers = function (parameterList, parameter) {
if (parameter.modifiers.length > 0) {
var modifiers = parameter.modifiers;
for (var i = 0, n = modifiers.length; i < n; i++) {
var modifier = modifiers[i];
if (this.checkParameterAccessibilityModifier(parameterList, modifier, i)) {
return true;
}
}
}
return false;
};
GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierIndex) {
if (!TypeScript.SyntaxFacts.isAccessibilityModifier(modifier.kind)) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]);
return true;
}
else {
if (modifierIndex > 0) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForTrailingComma = function (list) {
if (list.length === 0 || list.length % 2 === 1) {
return false;
}
var child = list[list.length - 1];
this.pushDiagnostic(child, TypeScript.DiagnosticCode.Trailing_comma_not_allowed);
return true;
};
GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (list, reportToken, listKind) {
if (TypeScript.childCount(list) > 0) {
return false;
}
this.pushDiagnostic(reportToken, TypeScript.DiagnosticCode._0_list_cannot_be_empty, [listKind]);
return true;
};
GrammarCheckerWalker.prototype.visitParameterList = function (node) {
if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingComma(node.parameters)) {
return;
}
_super.prototype.visitParameterList.call(this, node);
};
GrammarCheckerWalker.prototype.visitHeritageClause = function (node) {
if (this.checkForTrailingComma(node.typeNames) || this.checkForAtLeastOneElement(node.typeNames, node.extendsOrImplementsKeyword, TypeScript.SyntaxFacts.getText(node.extendsOrImplementsKeyword.kind))) {
return;
}
_super.prototype.visitHeritageClause.call(this, node);
};
GrammarCheckerWalker.prototype.visitArgumentList = function (node) {
if (this.checkForTrailingComma(node.arguments)) {
return;
}
_super.prototype.visitArgumentList.call(this, node);
};
GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) {
if (this.checkForAtLeastOneElement(node.variableDeclarators, node.varKeyword, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.variable_declaration, undefined)) || this.checkForTrailingComma(node.variableDeclarators)) {
return;
}
_super.prototype.visitVariableDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) {
if (this.checkForTrailingComma(node.typeArguments) || this.checkForAtLeastOneElement(node.typeArguments, node.lessThanToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_argument, undefined))) {
return;
}
_super.prototype.visitTypeArgumentList.call(this, node);
};
GrammarCheckerWalker.prototype.visitTupleType = function (node) {
if (this.checkForTrailingComma(node.types) || this.checkForAtLeastOneElement(node.types, node.openBracketToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, undefined))) {
return;
}
_super.prototype.visitTupleType.call(this, node);
};
GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) {
if (this.checkForTrailingComma(node.typeParameters) || this.checkForAtLeastOneElement(node.typeParameters, node.lessThanToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, undefined))) {
return;
}
_super.prototype.visitTypeParameterList.call(this, node);
};
GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) {
if (node.parameters.length !== 1) {
this.pushDiagnostic(node.openBracketToken, TypeScript.DiagnosticCode.Index_signature_must_have_exactly_one_parameter);
return true;
}
var parameter = TypeScript.nonSeparatorAt(node.parameters, 0);
if (parameter.dotDotDotToken) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters);
return true;
}
else if (parameter.modifiers.length > 0) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers);
return true;
}
else if (parameter.questionToken) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark);
return true;
}
else if (parameter.equalsValueClause) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer);
return true;
}
else if (!parameter.typeAnnotation) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation);
return true;
}
else if (parameter.typeAnnotation.type.kind !== 71 /* StringKeyword */ && parameter.typeAnnotation.type.kind !== 69 /* NumberKeyword */) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitIndexSignature = function (node) {
if (this.checkIndexSignatureParameter(node)) {
return;
}
if (!node.typeAnnotation) {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation);
return;
}
_super.prototype.visitIndexSignature.call(this, node);
};
GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) {
var seenExtendsClause = false;
var seenImplementsClause = false;
for (var i = 0, n = node.heritageClauses.length; i < n; i++) {
TypeScript.Debug.assert(i <= 2);
var heritageClause = node.heritageClauses[i];
if (heritageClause.extendsOrImplementsKeyword.kind === 50 /* ExtendsKeyword */) {
if (seenExtendsClause) {
this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen);
return true;
}
if (seenImplementsClause) {
this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause);
return true;
}
if (TypeScript.nonSeparatorCount(heritageClause.typeNames) > 1) {
this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class);
return true;
}
seenExtendsClause = true;
}
else {
TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.kind === 53 /* ImplementsKeyword */);
if (seenImplementsClause) {
this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen);
return true;
}
seenImplementsClause = true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) {
if (this.inAmbientDeclaration) {
var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 65 /* DeclareKeyword */);
if (declareToken) {
this.pushDiagnostic(declareToken, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, reportToken, modifiers) {
if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) {
if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 65 /* DeclareKeyword */)) {
this.pushDiagnostic(reportToken, TypeScript.DiagnosticCode.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
return true;
}
}
};
GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node)) {
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */);
_super.prototype.visitClassDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) {
var seenExtendsClause = false;
for (var i = 0, n = node.heritageClauses.length; i < n; i++) {
TypeScript.Debug.assert(i <= 1);
var heritageClause = node.heritageClauses[i];
if (heritageClause.extendsOrImplementsKeyword.kind === 50 /* ExtendsKeyword */) {
if (seenExtendsClause) {
this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen);
return true;
}
seenExtendsClause = true;
}
else {
TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.kind === 53 /* ImplementsKeyword */);
this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) {
for (var i = 0, n = modifiers.length; i < n; i++) {
var modifier = modifiers[i];
if (modifier.kind === 65 /* DeclareKeyword */) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_with_an_interface_declaration);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) {
if (this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) {
return;
}
_super.prototype.visitInterfaceDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) {
var seenAccessibilityModifier = false;
var seenStaticModifier = false;
for (var i = 0, n = list.length; i < n; i++) {
var modifier = list[i];
if (TypeScript.SyntaxFacts.isAccessibilityModifier(modifier.kind)) {
if (seenAccessibilityModifier) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen);
return true;
}
if (seenStaticModifier) {
var previousToken = list[i - 1];
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]);
return true;
}
seenAccessibilityModifier = true;
}
else if (modifier.kind === 60 /* StaticKeyword */) {
if (seenStaticModifier) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]);
return true;
}
seenStaticModifier = true;
}
else {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) {
if (this.checkClassElementModifiers(node.modifiers)) {
return;
}
_super.prototype.visitMemberVariableDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.visitMethodSignature = function (node) {
if (this.checkForDisallowedTemplatePropertyName(node.propertyName) || this.checkForDisallowedComputedPropertyName(node.propertyName)) {
return;
}
_super.prototype.visitMethodSignature.call(this, node);
};
GrammarCheckerWalker.prototype.visitPropertySignature = function (node) {
if (this.checkForDisallowedTemplatePropertyName(node.propertyName) || this.checkForDisallowedComputedPropertyName(node.propertyName)) {
return;
}
_super.prototype.visitPropertySignature.call(this, node);
};
GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) {
if (this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedTemplatePropertyName(node.propertyName)) {
return;
}
_super.prototype.visitMemberFunctionDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node) {
if (node.callSignature.parameterList.parameters.length !== 0) {
this.pushDiagnostic(node.propertyName, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) {
if (this.checkIndexMemberModifiers(node)) {
return;
}
_super.prototype.visitIndexMemberDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) {
if (node.modifiers.length > 0) {
this.pushDiagnostic(node.modifiers[0], TypeScript.DiagnosticCode.Modifiers_cannot_appear_here);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (reportToken, languageVersion, diagnosticKey) {
if (this.syntaxTree.languageVersion() < languageVersion) {
this.pushDiagnostic(reportToken, diagnosticKey);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) {
var savedInObjectLiteralExpression = this.inObjectLiteralExpression;
this.inObjectLiteralExpression = true;
_super.prototype.visitObjectLiteralExpression.call(this, node);
this.inObjectLiteralExpression = savedInObjectLiteralExpression;
};
GrammarCheckerWalker.prototype.visitGetAccessor = function (node) {
if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node.getKeyword, 1 /* ES5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkGetAccessorParameter(node) || this.checkForDisallowedTemplatePropertyName(node.propertyName)) {
return;
}
_super.prototype.visitGetAccessor.call(this, node);
};
GrammarCheckerWalker.prototype.checkForDisallowedSetAccessorTypeAnnotation = function (accessor) {
if (accessor.callSignature.typeAnnotation) {
this.pushDiagnostic(accessor.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_set_accessor);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedAccessorTypeParameters = function (callSignature) {
if (callSignature.typeParameterList) {
this.pushDiagnostic(callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_an_accessor);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) {
if (this.inAmbientDeclaration) {
this.pushDiagnostic(accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node) {
var parameters = node.callSignature.parameterList.parameters;
if (TypeScript.nonSeparatorCount(parameters) !== 1) {
this.pushDiagnostic(node.propertyName, TypeScript.DiagnosticCode.set_accessor_must_have_exactly_one_parameter);
return true;
}
var parameter = TypeScript.nonSeparatorAt(parameters, 0);
if (parameter.questionToken) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional);
return true;
}
if (parameter.equalsValueClause) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer);
return true;
}
if (parameter.dotDotDotToken) {
this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitSimplePropertyAssignment = function (node) {
if (this.checkForDisallowedTemplatePropertyName(node.propertyName)) {
return;
}
_super.prototype.visitSimplePropertyAssignment.call(this, node);
};
GrammarCheckerWalker.prototype.visitSetAccessor = function (node) {
if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node.setKeyword, 1 /* ES5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkForDisallowedSetAccessorTypeAnnotation(node) || this.checkSetAccessorParameter(node) || this.checkForDisallowedTemplatePropertyName(node.propertyName)) {
return;
}
_super.prototype.visitSetAccessor.call(this, node);
};
GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) {
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */);
_super.prototype.visitEnumDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkEnumElements = function (node) {
var previousValueWasComputed = false;
for (var i = 0, n = TypeScript.nonSeparatorCount(node.enumElements); i < n; i++) {
var enumElement = TypeScript.nonSeparatorAt(node.enumElements, i);
if (!enumElement.equalsValueClause && previousValueWasComputed) {
this.pushDiagnostic(enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer);
return true;
}
if (enumElement.equalsValueClause) {
var value = enumElement.equalsValueClause.value;
previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value);
}
}
return false;
};
GrammarCheckerWalker.prototype.visitEnumElement = function (node) {
if (this.checkForDisallowedTemplatePropertyName(node.propertyName) || this.checkForDisallowedComputedPropertyName(node.propertyName)) {
return;
}
if (this.inAmbientDeclaration && node.equalsValueClause) {
var expression = node.equalsValueClause.value;
if (!TypeScript.Syntax.isIntegerLiteral(expression)) {
this.pushDiagnostic(node.equalsValueClause.value, TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers);
return;
}
}
_super.prototype.visitEnumElement.call(this, node);
};
GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) {
if (node.expression.kind === 52 /* SuperKeyword */ && node.argumentList.typeArgumentList) {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments);
}
_super.prototype.visitInvocationExpression.call(this, node);
};
GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) {
var seenExportModifier = false;
var seenDeclareModifier = false;
for (var i = 0, n = modifiers.length; i < n; i++) {
var modifier = modifiers[i];
if (TypeScript.SyntaxFacts.isAccessibilityModifier(modifier.kind) || modifier.kind === 60 /* StaticKeyword */) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]);
return true;
}
if (modifier.kind === 65 /* DeclareKeyword */) {
if (seenDeclareModifier) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen);
return;
}
seenDeclareModifier = true;
}
else if (modifier.kind === 49 /* ExportKeyword */) {
if (seenExportModifier) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]);
return;
}
if (seenDeclareModifier) {
this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(49 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(65 /* DeclareKeyword */)]);
return;
}
seenExportModifier = true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) {
if (node.name.kind !== 12 /* StringLiteral */) {
for (var i = 0, n = node.moduleElements.length; i < n; i++) {
var child = node.moduleElements[i];
if (child.kind === 138 /* ImportDeclaration */) {
var importDeclaration = child;
if (importDeclaration.moduleReference.kind === 212 /* ExternalModuleReference */) {
this.pushDiagnostic(importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module);
}
}
}
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) {
var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 65 /* DeclareKeyword */);
if (declareToken) {
this.pushDiagnostic(declareToken, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_with_an_import_declaration);
return true;
}
};
GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) {
return;
}
_super.prototype.visitImportDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, TypeScript.firstToken(node.name), node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node)) {
return;
}
if (node.name.kind === 12 /* StringLiteral */) {
if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */)) {
this.pushDiagnostic(node.name, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names);
return;
}
}
if (node.name.kind !== 12 /* StringLiteral */ && this.checkForDisallowedExportAssignment(node)) {
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */);
_super.prototype.visitModuleDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) {
for (var i = 0, n = node.moduleElements.length; i < n; i++) {
var child = node.moduleElements[i];
if (child.kind === 139 /* ExportAssignment */) {
this.pushDiagnostic(child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitBlock = function (node) {
if (this.checkForBlockInAmbientContext(node)) {
return;
}
var savedInBlock = this.inBlock;
this.inBlock = true;
_super.prototype.visitBlock.call(this, node);
this.inBlock = savedInBlock;
};
GrammarCheckerWalker.prototype.checkForBlockInAmbientContext = function (node) {
if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) {
if (node.parent.kind === 1 /* List */) {
this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts);
}
else {
this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.A_function_implementation_cannot_be_declared_in_an_ambient_context);
}
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) {
if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) {
this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitBreakStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkBreakStatementTarget(node)) {
return;
}
_super.prototype.visitBreakStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitContinueStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkContinueStatementTarget(node)) {
return;
}
_super.prototype.visitContinueStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkBreakStatementTarget = function (node) {
if (node.identifier) {
var breakableLabels = this.getEnclosingLabels(node, true, false);
if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) {
var breakableLabels = this.getEnclosingLabels(node, true, true);
if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary);
}
else {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_not_found);
}
return true;
}
}
else if (!this.inIterationStatement(node, false) && !this.inSwitchStatement(node)) {
if (this.inIterationStatement(node, true)) {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary);
}
else {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement);
}
return true;
}
return false;
};
GrammarCheckerWalker.prototype.inSwitchStatement = function (ast) {
while (ast) {
if (ast.kind === 156 /* SwitchStatement */) {
return true;
}
if (TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(ast)) {
return false;
}
ast = ast.parent;
}
return false;
};
GrammarCheckerWalker.prototype.isIterationStatement = function (ast) {
switch (ast.kind) {
case 159 /* ForStatement */:
case 160 /* ForInStatement */:
case 163 /* WhileStatement */:
case 166 /* DoStatement */:
return true;
}
return false;
};
GrammarCheckerWalker.prototype.inIterationStatement = function (element, crossFunctions) {
while (element) {
if (this.isIterationStatement(element)) {
return true;
}
if (!crossFunctions && TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) {
return false;
}
element = element.parent;
}
return false;
};
GrammarCheckerWalker.prototype.getEnclosingLabels = function (element, breakable, crossFunctions) {
var result = [];
element = element.parent;
while (element) {
if (element.kind === 165 /* LabeledStatement */) {
var labeledStatement = element;
if (breakable) {
result.push(labeledStatement);
}
else {
if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) {
result.push(labeledStatement);
}
}
}
if (!crossFunctions && TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) {
break;
}
element = element.parent;
}
return result;
};
GrammarCheckerWalker.prototype.labelIsOnContinuableConstruct = function (statement) {
switch (statement.kind) {
case 165 /* LabeledStatement */:
return this.labelIsOnContinuableConstruct(statement.statement);
case 163 /* WhileStatement */:
case 159 /* ForStatement */:
case 160 /* ForInStatement */:
case 166 /* DoStatement */:
return true;
default:
return false;
}
};
GrammarCheckerWalker.prototype.checkContinueStatementTarget = function (node) {
if (!this.inIterationStatement(node, false)) {
if (this.inIterationStatement(node, true)) {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary);
}
else {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement);
}
return true;
}
else if (node.identifier) {
var continuableLabels = this.getEnclosingLabels(node, false, false);
if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) {
var continuableLabels = this.getEnclosingLabels(node, false, true);
if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary);
}
else {
this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_not_found);
}
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitDebuggerStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitDoStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitDoStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitEmptyStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitExpressionStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitForInStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node) || this.checkForInLeftHandSideExpression(node)) {
return;
}
_super.prototype.visitForInStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkForInLeftHandSideExpression = function (node) {
if (node.left.kind !== 190 /* VariableDeclaration */ && !TypeScript.SyntaxUtilities.isLeftHandSizeExpression(node.left)) {
this.pushDiagnostic(node.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_in_for_in_statement);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) {
if (node.left.kind === 190 /* VariableDeclaration */ && node.left.variableDeclarators.length > 1) {
this.pushDiagnostic(node.left, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitForStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitForStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitIfStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitIfStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkForInvalidLabelIdentifier(node)) {
return;
}
_super.prototype.visitLabeledStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkForInvalidLabelIdentifier = function (node) {
var labelIdentifier = TypeScript.tokenValueText(node.identifier);
var breakableLabels = this.getEnclosingLabels(node, true, false);
var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === labelIdentifier; });
if (matchingLabel) {
this.pushDiagnostic(node.identifier, TypeScript.DiagnosticCode.Duplicate_identifier_0, [labelIdentifier]);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitReturnStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkForReturnStatementNotInFunctionBody(node)) {
return;
}
_super.prototype.visitReturnStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkForReturnStatementNotInFunctionBody = function (node) {
for (var element = node; element; element = element.parent) {
if (TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) {
return false;
}
}
this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.return_statement_must_be_contained_within_a_function_body);
return true;
};
GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitSwitchStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitThrowStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitThrowStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitTryStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitTryStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitWhileStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node)) {
return;
}
_super.prototype.visitWhileStatement.call(this, node);
};
GrammarCheckerWalker.prototype.visitWithStatement = function (node) {
if (this.checkForStatementInAmbientContxt(node) || this.checkForWithInStrictMode(node)) {
return;
}
_super.prototype.visitWithStatement.call(this, node);
};
GrammarCheckerWalker.prototype.checkForWithInStrictMode = function (node) {
if (TypeScript.parsedInStrictMode(node)) {
this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.with_statements_are_not_allowed_in_strict_mode);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (modifiers) {
if (this.inBlock || this.inObjectLiteralExpression) {
if (modifiers.length > 0) {
this.pushDiagnostic(modifiers[0], TypeScript.DiagnosticCode.Modifiers_cannot_appear_here);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedEvalOrArguments(node, node.identifier)) {
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */);
_super.prototype.visitFunctionDeclaration.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitFunctionExpression = function (node) {
if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) {
return;
}
_super.prototype.visitFunctionExpression.call(this, node);
};
GrammarCheckerWalker.prototype.visitFunctionPropertyAssignment = function (node) {
if (this.checkForDisallowedTemplatePropertyName(node.propertyName)) {
return;
}
_super.prototype.visitFunctionPropertyAssignment.call(this, node);
};
GrammarCheckerWalker.prototype.visitVariableStatement = function (node) {
if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration.varKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) {
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 65 /* DeclareKeyword */);
_super.prototype.visitVariableStatement.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.checkListSeparators = function (list, kind) {
for (var i = 0, n = TypeScript.separatorCount(list); i < n; i++) {
var child = TypeScript.separatorAt(list, i);
if (child.kind !== kind) {
this.pushDiagnostic(child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]);
}
}
return false;
};
GrammarCheckerWalker.prototype.visitObjectType = function (node) {
if (this.checkListSeparators(node.typeMembers, 80 /* SemicolonToken */)) {
return;
}
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitObjectType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitArrayType = function (node) {
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitArrayType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitFunctionType = function (node) {
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitFunctionType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitConstructorType = function (node) {
var savedInAmbientDeclaration = this.inAmbientDeclaration;
this.inAmbientDeclaration = true;
_super.prototype.visitConstructorType.call(this, node);
this.inAmbientDeclaration = savedInAmbientDeclaration;
};
GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) {
if (this.checkVariableDeclaratorInitializer(node) || this.checkVariableDeclaratorIdentifier(node) || this.checkForDisallowedTemplatePropertyName(node.propertyName)) {
return;
}
_super.prototype.visitVariableDeclarator.call(this, node);
};
GrammarCheckerWalker.prototype.checkForDisallowedTemplatePropertyName = function (propertyName) {
if (propertyName.kind === 13 /* NoSubstitutionTemplateToken */) {
this.pushDiagnostic(propertyName, TypeScript.DiagnosticCode.Template_literal_cannot_be_used_as_an_element_name);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkForDisallowedComputedPropertyName = function (propertyName) {
if (propertyName.kind === 211 /* ComputedPropertyName */) {
this.pushDiagnostic(propertyName, TypeScript.DiagnosticCode.Computed_property_names_cannot_be_used_here);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkVariableDeclaratorIdentifier = function (node) {
if (node.parent.kind !== 141 /* MemberVariableDeclaration */) {
TypeScript.Debug.assert(TypeScript.isToken(node.propertyName), "A normal variable declarator must always have a token for a name.");
if (this.checkForDisallowedEvalOrArguments(node, node.propertyName)) {
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkVariableDeclaratorInitializer = function (node) {
if (this.inAmbientDeclaration && node.equalsValueClause) {
this.pushDiagnostic(TypeScript.firstToken(node.equalsValueClause.value), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) {
if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) {
return;
}
_super.prototype.visitConstructorDeclaration.call(this, node);
};
GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) {
for (var i = 0, n = modifiers.length; i < n; i++) {
var child = modifiers[i];
if (child.kind !== 59 /* PublicKeyword */) {
this.pushDiagnostic(child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind)]);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) {
if (node.callSignature.typeParameterList) {
this.pushDiagnostic(node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) {
if (node.callSignature.typeAnnotation) {
this.pushDiagnostic(node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitBinaryExpression = function (node) {
if (this.checkIllegalAssignment(node)) {
return;
}
_super.prototype.visitBinaryExpression.call(this, node);
};
GrammarCheckerWalker.prototype.visitPrefixUnaryExpression = function (node) {
if (TypeScript.parsedInStrictMode(node) && this.isPreIncrementOrDecrementExpression(node) && this.isEvalOrArguments(node.operand)) {
this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.operand)]);
}
_super.prototype.visitPrefixUnaryExpression.call(this, node);
};
GrammarCheckerWalker.prototype.visitPostfixUnaryExpression = function (node) {
if (TypeScript.parsedInStrictMode(node) && this.isEvalOrArguments(node.operand)) {
this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.operand)]);
}
_super.prototype.visitPostfixUnaryExpression.call(this, node);
};
GrammarCheckerWalker.prototype.visitParameter = function (node) {
if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) {
return;
}
_super.prototype.visitParameter.call(this, node);
};
GrammarCheckerWalker.prototype.checkForDisallowedEvalOrArguments = function (node, token) {
if (token) {
if (TypeScript.parsedInStrictMode(node) && this.isEvalOrArguments(token)) {
this.pushDiagnostic(token, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(token)]);
return true;
}
}
return false;
};
GrammarCheckerWalker.prototype.isPreIncrementOrDecrementExpression = function (node) {
switch (node.operatorToken.kind) {
case 96 /* MinusMinusToken */:
case 95 /* PlusPlusToken */:
return true;
}
return false;
};
GrammarCheckerWalker.prototype.visitDeleteExpression = function (node) {
if (TypeScript.parsedInStrictMode(node) && node.expression.kind === 9 /* IdentifierName */) {
this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.delete_cannot_be_called_on_an_identifier_in_strict_mode);
return;
}
_super.prototype.visitDeleteExpression.call(this, node);
};
GrammarCheckerWalker.prototype.checkIllegalAssignment = function (node) {
if (TypeScript.parsedInStrictMode(node) && TypeScript.SyntaxFacts.isAssignmentOperatorToken(node.operatorToken.kind) && this.isEvalOrArguments(node.left)) {
this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.left)]);
return true;
}
return false;
};
GrammarCheckerWalker.prototype.getEvalOrArguments = function (expr) {
if (expr.kind === 9 /* IdentifierName */) {
var text = TypeScript.tokenValueText(expr);
if (text === "eval" || text === "arguments") {
return text;
}
}
return undefined;
};
GrammarCheckerWalker.prototype.isEvalOrArguments = function (expr) {
return !!this.getEvalOrArguments(expr);
};
GrammarCheckerWalker.prototype.visitConstraint = function (node) {
if (this.checkConstraintType(node)) {
return;
}
_super.prototype.visitConstraint.call(this, node);
};
GrammarCheckerWalker.prototype.checkConstraintType = function (node) {
if (!TypeScript.SyntaxFacts.isType(node.typeOrExpression.kind)) {
this.pushDiagnostic(node.typeOrExpression, TypeScript.DiagnosticCode.Type_expected);
return true;
}
return false;
};
return GrammarCheckerWalker;
})(TypeScript.SyntaxWalker);
function firstSyntaxTreeToken(syntaxTree) {
var scanner = TypeScript.Scanner.createScanner(syntaxTree.languageVersion(), syntaxTree.text, function () {
});
return scanner.scan(false);
}
function externalModuleIndicatorSpan(syntaxTree) {
var firstToken = firstSyntaxTreeToken(syntaxTree);
return externalModuleIndicatorSpanWorker(syntaxTree, firstToken);
}
TypeScript.externalModuleIndicatorSpan = externalModuleIndicatorSpan;
function externalModuleIndicatorSpanWorker(syntaxTree, firstToken) {
var leadingTrivia = firstToken.leadingTrivia(syntaxTree.text);
return implicitImportSpan(leadingTrivia) || topLevelImportOrExportSpan(syntaxTree.sourceUnit());
}
TypeScript.externalModuleIndicatorSpanWorker = externalModuleIndicatorSpanWorker;
function implicitImportSpan(sourceUnitLeadingTrivia) {
for (var i = 0, n = sourceUnitLeadingTrivia.count(); i < n; i++) {
var trivia = sourceUnitLeadingTrivia.syntaxTriviaAt(i);
if (trivia.isComment()) {
var span = implicitImportSpanWorker(trivia);
if (span) {
return span;
}
}
}
return undefined;
}
function implicitImportSpanWorker(trivia) {
var implicitImportRegEx = /^(\/\/\/\s*<implicit-import\s*)*\/>/gim;
var match = implicitImportRegEx.exec(trivia.fullText());
if (match) {
return new TypeScript.TextSpan(trivia.fullStart(), trivia.fullWidth());
}
return undefined;
}
function topLevelImportOrExportSpan(node) {
for (var i = 0, n = node.moduleElements.length; i < n; i++) {
var moduleElement = node.moduleElements[i];
var _firstToken = TypeScript.firstToken(moduleElement);
if (_firstToken && _firstToken.kind === 49 /* ExportKeyword */) {
return new TypeScript.TextSpan(TypeScript.start(_firstToken), TypeScript.width(_firstToken));
}
if (moduleElement.kind === 138 /* ImportDeclaration */) {
var importDecl = moduleElement;
if (importDecl.moduleReference.kind === 212 /* ExternalModuleReference */) {
var literal = importDecl.moduleReference.stringLiteral;
return new TypeScript.TextSpan(TypeScript.start(literal), TypeScript.width(literal));
}
}
}
return undefined;
}
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Unicode = (function () {
function Unicode() {
}
Unicode.lookupInUnicodeMap = function (code, map) {
if (code < map[0]) {
return false;
}
var lo = 0;
var hi = map.length;
var mid;
while (lo + 1 < hi) {
mid = lo + (hi - lo) / 2;
mid -= mid % 2;
if (map[mid] <= code && code <= map[mid + 1]) {
return true;
}
if (code < map[mid]) {
hi = mid;
}
else {
lo = mid + 2;
}
}
return false;
};
Unicode.isIdentifierStart = function (code, languageVersion) {
if (languageVersion === 0 /* ES3 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart);
}
else if (languageVersion >= 1 /* ES5 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart);
}
else {
throw TypeScript.Errors.argumentOutOfRange("languageVersion");
}
};
Unicode.isIdentifierPart = function (code, languageVersion) {
if (languageVersion === 0 /* ES3 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart);
}
else if (languageVersion >= 1 /* ES5 */) {
return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart);
}
else {
throw TypeScript.Errors.argumentOutOfRange("languageVersion");
}
};
Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
return Unicode;
})();
TypeScript.Unicode = Unicode;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var IncrementalParser;
(function (IncrementalParser) {
function createParserSource(oldSyntaxTree, textChangeRange, text) {
var fileName = oldSyntaxTree.fileName();
var languageVersion = oldSyntaxTree.languageVersion();
var _scannerParserSource;
var _changeRange;
var _changeRangeNewSpan;
var _changeDelta = 0;
var _oldSourceUnitCursor = getSyntaxCursor();
var oldSourceUnit = oldSyntaxTree.sourceUnit();
var _outstandingRewindPointCount = 0;
if (oldSourceUnit.moduleElements.length > 0) {
_oldSourceUnitCursor.pushElement(TypeScript.childAt(oldSourceUnit.moduleElements, 0), 0);
}
_changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit);
_changeRangeNewSpan = _changeRange.newSpan();
if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) {
TypeScript.Debug.assert((TypeScript.fullWidth(oldSourceUnit) - _changeRange.span().length() + _changeRange.newLength()) === text.length());
}
_scannerParserSource = TypeScript.Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion());
function release() {
_scannerParserSource.release();
_scannerParserSource = undefined;
_oldSourceUnitCursor = undefined;
_outstandingRewindPointCount = 0;
}
function extendToAffectedRange(changeRange, sourceUnit) {
var maxLookahead = 1;
var start = changeRange.span().start();
for (var i = 0; start > 0 && i <= maxLookahead; i++) {
var token = TypeScript.findToken(sourceUnit, start);
var position = token.fullStart();
start = Math.max(0, position - 1);
}
var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end());
var finalLength = changeRange.newLength() + (changeRange.span().start() - start);
return new TypeScript.TextChangeRange(finalSpan, finalLength);
}
function absolutePosition() {
return _scannerParserSource.absolutePosition();
}
function tokenDiagnostics() {
return _scannerParserSource.tokenDiagnostics();
}
function getRewindPoint() {
var rewindPoint = _scannerParserSource.getRewindPoint();
var oldSourceUnitCursorClone = cloneSyntaxCursor(_oldSourceUnitCursor);
rewindPoint.changeDelta = _changeDelta;
rewindPoint.changeRange = _changeRange;
rewindPoint.oldSourceUnitCursor = _oldSourceUnitCursor;
_oldSourceUnitCursor = oldSourceUnitCursorClone;
_outstandingRewindPointCount++;
return rewindPoint;
}
function rewind(rewindPoint) {
_changeRange = rewindPoint.changeRange;
_changeDelta = rewindPoint.changeDelta;
returnSyntaxCursor(_oldSourceUnitCursor);
_oldSourceUnitCursor = rewindPoint.oldSourceUnitCursor;
rewindPoint.oldSourceUnitCursor = undefined;
_scannerParserSource.rewind(rewindPoint);
}
function releaseRewindPoint(rewindPoint) {
if (rewindPoint.oldSourceUnitCursor) {
returnSyntaxCursor(rewindPoint.oldSourceUnitCursor);
}
_scannerParserSource.releaseRewindPoint(rewindPoint);
_outstandingRewindPointCount--;
TypeScript.Debug.assert(_outstandingRewindPointCount >= 0);
}
function isPinned() {
return _outstandingRewindPointCount > 0;
}
function canReadFromOldSourceUnit() {
if (isPinned()) {
return false;
}
if (_changeRange && _changeRangeNewSpan.intersectsWithPosition(absolutePosition())) {
return false;
}
syncCursorToNewTextIfBehind();
return _changeDelta === 0 && !_oldSourceUnitCursor.isFinished();
}
function updateTokenPosition(token) {
if (isPastChangeRange()) {
token.setFullStart(absolutePosition());
}
}
function updateNodePosition(node) {
if (isPastChangeRange()) {
var position = absolutePosition();
var tokens = getTokens(node);
for (var i = 0, n = tokens.length; i < n; i++) {
var token = tokens[i];
token.setFullStart(position);
position += token.fullWidth();
}
}
}
function getTokens(node) {
var tokens = node.__cachedTokens;
if (!tokens) {
tokens = [];
tokenCollectorWalker.tokens = tokens;
TypeScript.visitNodeOrToken(tokenCollectorWalker, node);
node.__cachedTokens = tokens;
tokenCollectorWalker.tokens = undefined;
}
return tokens;
}
function currentNode() {
if (canReadFromOldSourceUnit()) {
var node = tryGetNodeFromOldSourceUnit();
if (node) {
updateNodePosition(node);
return node;
}
}
return undefined;
}
function currentToken() {
if (canReadFromOldSourceUnit()) {
var token = tryGetTokenFromOldSourceUnit();
if (token) {
updateTokenPosition(token);
return token;
}
}
return _scannerParserSource.currentToken();
}
function currentContextualToken() {
return _scannerParserSource.currentContextualToken();
}
function syncCursorToNewTextIfBehind() {
while (true) {
if (_oldSourceUnitCursor.isFinished()) {
break;
}
if (_changeDelta >= 0) {
break;
}
var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken();
if (TypeScript.isNode(currentNodeOrToken) && (TypeScript.fullWidth(currentNodeOrToken) > Math.abs(_changeDelta))) {
_oldSourceUnitCursor.moveToFirstChild();
}
else {
_oldSourceUnitCursor.moveToNextSibling();
_changeDelta += TypeScript.fullWidth(currentNodeOrToken);
}
}
}
function intersectsWithChangeRangeSpanInOriginalText(start, length) {
return !isPastChangeRange() && _changeRange.span().intersectsWith(start, length);
}
function tryGetNodeFromOldSourceUnit() {
while (true) {
var node = _oldSourceUnitCursor.currentNode();
if (node === undefined) {
return undefined;
}
if (!intersectsWithChangeRangeSpanInOriginalText(absolutePosition(), TypeScript.fullWidth(node))) {
var isIncrementallyUnusuable = TypeScript.isIncrementallyUnusable(node);
if (!isIncrementallyUnusuable) {
return node;
}
}
_oldSourceUnitCursor.moveToFirstChild();
}
}
function canReuseTokenFromOldSourceUnit(position, token) {
if (token) {
if (!intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) {
if (!token.isIncrementallyUnusable() && !TypeScript.Scanner.isContextualToken(token)) {
return true;
}
}
}
return false;
}
function tryGetTokenFromOldSourceUnit() {
var token = _oldSourceUnitCursor.currentToken();
return canReuseTokenFromOldSourceUnit(absolutePosition(), token) ? token : undefined;
}
function peekToken(n) {
if (canReadFromOldSourceUnit()) {
var token = tryPeekTokenFromOldSourceUnit(n);
if (token) {
return token;
}
}
return _scannerParserSource.peekToken(n);
}
function tryPeekTokenFromOldSourceUnit(n) {
var cursorClone = cloneSyntaxCursor(_oldSourceUnitCursor);
var token = tryPeekTokenFromOldSourceUnitWorker(n);
returnSyntaxCursor(_oldSourceUnitCursor);
_oldSourceUnitCursor = cursorClone;
return token;
}
function tryPeekTokenFromOldSourceUnitWorker(n) {
var currentPosition = absolutePosition();
_oldSourceUnitCursor.moveToFirstToken();
for (var i = 0; i < n; i++) {
var interimToken = _oldSourceUnitCursor.currentToken();
if (!canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) {
return undefined;
}
currentPosition += interimToken.fullWidth();
_oldSourceUnitCursor.moveToNextSibling();
}
var token = _oldSourceUnitCursor.currentToken();
return canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : undefined;
}
function consumeNode(node) {
_oldSourceUnitCursor.moveToNextSibling();
var _absolutePosition = absolutePosition() + TypeScript.fullWidth(node);
_scannerParserSource.resetToPosition(_absolutePosition);
}
function consumeToken(currentToken) {
if (_oldSourceUnitCursor.currentToken() === currentToken) {
_oldSourceUnitCursor.moveToNextSibling();
var _absolutePosition = absolutePosition() + currentToken.fullWidth();
_scannerParserSource.resetToPosition(_absolutePosition);
}
else {
_changeDelta -= currentToken.fullWidth();
_scannerParserSource.consumeToken(currentToken);
if (!isPastChangeRange()) {
if (absolutePosition() >= _changeRangeNewSpan.end()) {
_changeDelta += _changeRange.newLength() - _changeRange.span().length();
_changeRange = undefined;
}
}
}
}
function isPastChangeRange() {
return _changeRange === undefined;
}
return {
text: text,
fileName: fileName,
languageVersion: languageVersion,
currentNode: currentNode,
currentToken: currentToken,
currentContextualToken: currentContextualToken,
peekToken: peekToken,
consumeNode: consumeNode,
consumeToken: consumeToken,
getRewindPoint: getRewindPoint,
rewind: rewind,
releaseRewindPoint: releaseRewindPoint,
tokenDiagnostics: tokenDiagnostics,
release: release
};
}
function createSyntaxCursorPiece(element, indexInParent) {
return { element: element, indexInParent: indexInParent };
}
var syntaxCursorPool = [];
var syntaxCursorPoolCount = 0;
function returnSyntaxCursor(cursor) {
cursor.clean();
syntaxCursorPool[syntaxCursorPoolCount] = cursor;
syntaxCursorPoolCount++;
}
function getSyntaxCursor() {
var cursor = syntaxCursorPoolCount > 0 ? syntaxCursorPool[syntaxCursorPoolCount - 1] : createSyntaxCursor();
if (syntaxCursorPoolCount > 0) {
syntaxCursorPoolCount--;
syntaxCursorPool[syntaxCursorPoolCount] = undefined;
}
return cursor;
}
function cloneSyntaxCursor(cursor) {
var newCursor = getSyntaxCursor();
newCursor.deepCopyFrom(cursor);
return newCursor;
}
function createSyntaxCursor() {
var pieces = [];
var currentPieceIndex = -1;
function clean() {
for (var i = 0, n = pieces.length; i < n; i++) {
var piece = pieces[i];
if (piece.element === undefined) {
break;
}
piece.element = undefined;
piece.indexInParent = -1;
}
currentPieceIndex = -1;
}
function deepCopyFrom(other) {
for (var i = 0, n = other.pieces.length; i < n; i++) {
var piece = other.pieces[i];
if (piece.element === undefined) {
break;
}
pushElement(piece.element, piece.indexInParent);
}
}
function isFinished() {
return currentPieceIndex < 0;
}
function currentNodeOrToken() {
if (isFinished()) {
return undefined;
}
var result = pieces[currentPieceIndex].element;
return result;
}
function currentNode() {
var element = currentNodeOrToken();
return TypeScript.isNode(element) ? element : undefined;
}
function isEmptyList(element) {
return TypeScript.isList(element) && element.length === 0;
}
function moveToFirstChild() {
var nodeOrToken = currentNodeOrToken();
if (nodeOrToken === undefined) {
return;
}
if (TypeScript.isToken(nodeOrToken)) {
return;
}
for (var i = 0, n = TypeScript.childCount(nodeOrToken); i < n; i++) {
var child = TypeScript.childAt(nodeOrToken, i);
if (child && !isEmptyList(child)) {
pushElement(child, i);
moveToFirstChildIfList();
return;
}
}
moveToNextSibling();
}
function moveToNextSibling() {
while (!isFinished()) {
var currentPiece = pieces[currentPieceIndex];
var parent = currentPiece.element.parent;
for (var i = currentPiece.indexInParent + 1, n = TypeScript.childCount(parent); i < n; i++) {
var sibling = TypeScript.childAt(parent, i);
if (sibling && !isEmptyList(sibling)) {
currentPiece.element = sibling;
currentPiece.indexInParent = i;
moveToFirstChildIfList();
return;
}
}
currentPiece.element = undefined;
currentPiece.indexInParent = -1;
currentPieceIndex--;
}
}
function moveToFirstChildIfList() {
var element = pieces[currentPieceIndex].element;
if (TypeScript.isList(element)) {
pushElement(TypeScript.childAt(element, 0), 0);
}
}
function pushElement(element, indexInParent) {
currentPieceIndex++;
if (currentPieceIndex === pieces.length) {
pieces.push(createSyntaxCursorPiece(element, indexInParent));
}
else {
var piece = pieces[currentPieceIndex];
piece.element = element;
piece.indexInParent = indexInParent;
}
}
function moveToFirstToken() {
while (!isFinished()) {
var element = pieces[currentPieceIndex].element;
if (TypeScript.isNode(element)) {
moveToFirstChild();
continue;
}
return;
}
}
function currentToken() {
moveToFirstToken();
var element = currentNodeOrToken();
return element;
}
return {
pieces: pieces,
clean: clean,
isFinished: isFinished,
moveToFirstChild: moveToFirstChild,
moveToFirstToken: moveToFirstToken,
moveToNextSibling: moveToNextSibling,
currentNodeOrToken: currentNodeOrToken,
currentNode: currentNode,
currentToken: currentToken,
pushElement: pushElement,
deepCopyFrom: deepCopyFrom
};
}
var TokenCollectorWalker = (function (_super) {
__extends(TokenCollectorWalker, _super);
function TokenCollectorWalker() {
_super.apply(this, arguments);
this.tokens = [];
}
TokenCollectorWalker.prototype.visitToken = function (token) {
this.tokens.push(token);
};
return TokenCollectorWalker;
})(TypeScript.SyntaxWalker);
var tokenCollectorWalker = new TokenCollectorWalker();
function parse(oldSyntaxTree, textChangeRange, newText) {
if (textChangeRange.isUnchanged()) {
return oldSyntaxTree;
}
return TypeScript.Parser.parseSource(createParserSource(oldSyntaxTree, textChangeRange, newText), oldSyntaxTree.isDeclaration());
}
IncrementalParser.parse = parse;
})(IncrementalParser = TypeScript.IncrementalParser || (TypeScript.IncrementalParser = {}));
})(TypeScript || (TypeScript = {}));
var ts;
(function (ts) {
var OutliningElementsCollector;
(function (OutliningElementsCollector) {
function collectElements(sourceFile) {
var elements = [];
var collapseText = "...";
function addOutliningSpan(hintSpanNode, startElement, endElement, autoCollapse) {
if (hintSpanNode && startElement && endElement) {
var span = {
textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end),
hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end),
bannerText: collapseText,
autoCollapse: autoCollapse
};
elements.push(span);
}
}
function autoCollapse(node) {
switch (node.kind) {
case 189 /* ModuleBlock */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
return false;
}
return true;
}
var depth = 0;
var maxDepth = 20;
function walk(n) {
if (depth > maxDepth) {
return;
}
switch (n.kind) {
case 158 /* Block */:
var parent = n.parent;
var openBrace = ts.findChildOfKind(n, 13 /* OpenBraceToken */, sourceFile);
var closeBrace = ts.findChildOfKind(n, 14 /* CloseBraceToken */, sourceFile);
if (parent.kind === 163 /* DoStatement */ || parent.kind === 166 /* ForInStatement */ || parent.kind === 165 /* ForStatement */ || parent.kind === 162 /* IfStatement */ || parent.kind === 164 /* WhileStatement */ || parent.kind === 170 /* WithStatement */) {
addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n));
}
else {
var span = TypeScript.TextSpan.fromBounds(n.getStart(), n.end);
elements.push({
textSpan: span,
hintSpan: span,
bannerText: collapseText,
autoCollapse: autoCollapse(n)
});
}
break;
case 183 /* FunctionBlock */:
case 189 /* ModuleBlock */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
var openBrace = ts.findChildOfKind(n, 13 /* OpenBraceToken */, sourceFile);
var closeBrace = ts.findChildOfKind(n, 14 /* CloseBraceToken */, sourceFile);
addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n));
break;
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
case 140 /* ObjectLiteral */:
case 171 /* SwitchStatement */:
var openBrace = ts.findChildOfKind(n, 13 /* OpenBraceToken */, sourceFile);
var closeBrace = ts.findChildOfKind(n, 14 /* CloseBraceToken */, sourceFile);
addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n));
break;
case 139 /* ArrayLiteral */:
var openBracket = ts.findChildOfKind(n, 17 /* OpenBracketToken */, sourceFile);
var closeBracket = ts.findChildOfKind(n, 18 /* CloseBracketToken */, sourceFile);
addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n));
break;
}
depth++;
ts.forEachChild(n, walk);
depth--;
}
walk(sourceFile);
return elements;
}
OutliningElementsCollector.collectElements = collectElements;
})(OutliningElementsCollector = ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var NavigationBar;
(function (NavigationBar) {
function getNavigationBarItems(sourceFile) {
var hasGlobalNode = false;
return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem);
function getIndent(node) {
var indent = hasGlobalNode ? 1 : 0;
var current = node.parent;
while (current) {
switch (current.kind) {
case 188 /* ModuleDeclaration */:
do {
current = current.parent;
} while (current.kind === 188 /* ModuleDeclaration */);
case 184 /* ClassDeclaration */:
case 187 /* EnumDeclaration */:
case 185 /* InterfaceDeclaration */:
case 182 /* FunctionDeclaration */:
indent++;
}
current = current.parent;
}
return indent;
}
function getChildNodes(nodes) {
var childNodes = [];
for (var i = 0, n = nodes.length; i < n; i++) {
var node = nodes[i];
if (node.kind === 184 /* ClassDeclaration */ || node.kind === 187 /* EnumDeclaration */ || node.kind === 185 /* InterfaceDeclaration */ || node.kind === 188 /* ModuleDeclaration */ || node.kind === 182 /* FunctionDeclaration */) {
childNodes.push(node);
}
else if (node.kind === 159 /* VariableStatement */) {
childNodes.push.apply(childNodes, node.declarations);
}
}
return sortNodes(childNodes);
}
function getTopLevelNodes(node) {
var topLevelNodes = [];
topLevelNodes.push(node);
addTopLevelNodes(node.statements, topLevelNodes);
return topLevelNodes;
}
function sortNodes(nodes) {
return nodes.slice(0).sort(function (n1, n2) {
if (n1.name && n2.name) {
return n1.name.text.localeCompare(n2.name.text);
}
else if (n1.name) {
return 1;
}
else if (n2.name) {
return -1;
}
else {
return n1.kind - n2.kind;
}
});
}
function addTopLevelNodes(nodes, topLevelNodes) {
nodes = sortNodes(nodes);
for (var i = 0, n = nodes.length; i < n; i++) {
var node = nodes[i];
switch (node.kind) {
case 184 /* ClassDeclaration */:
case 187 /* EnumDeclaration */:
case 185 /* InterfaceDeclaration */:
topLevelNodes.push(node);
break;
case 188 /* ModuleDeclaration */:
var moduleDeclaration = node;
topLevelNodes.push(node);
addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes);
break;
case 182 /* FunctionDeclaration */:
var functionDeclaration = node;
if (isTopLevelFunctionDeclaration(functionDeclaration)) {
topLevelNodes.push(node);
addTopLevelNodes(functionDeclaration.body.statements, topLevelNodes);
}
break;
}
}
}
function isTopLevelFunctionDeclaration(functionDeclaration) {
if (functionDeclaration.kind === 182 /* FunctionDeclaration */) {
if (functionDeclaration.body && functionDeclaration.body.kind === 183 /* FunctionBlock */) {
if (ts.forEach(functionDeclaration.body.statements, function (s) { return s.kind === 182 /* FunctionDeclaration */ && !isEmpty(s.name.text); })) {
return true;
}
if (functionDeclaration.parent.kind !== 183 /* FunctionBlock */) {
return true;
}
}
}
return false;
}
function getItemsWorker(nodes, createItem) {
var items = [];
var keyToItem = {};
for (var i = 0, n = nodes.length; i < n; i++) {
var child = nodes[i];
var item = createItem(child);
if (item !== undefined) {
if (item.text.length > 0) {
var key = item.text + "-" + item.kind + "-" + item.indent;
var itemWithSameName = keyToItem[key];
if (itemWithSameName) {
merge(itemWithSameName, item);
}
else {
keyToItem[key] = item;
items.push(item);
}
}
}
}
return items;
}
function merge(target, source) {
target.spans.push.apply(target.spans, source.spans);
if (source.childItems) {
if (!target.childItems) {
target.childItems = [];
}
outer: for (var i = 0, n = source.childItems.length; i < n; i++) {
var sourceChild = source.childItems[i];
for (var j = 0, m = target.childItems.length; j < m; j++) {
var targetChild = target.childItems[j];
if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) {
merge(targetChild, sourceChild);
continue outer;
}
}
target.childItems.push(sourceChild);
}
}
}
function createChildItem(node) {
switch (node.kind) {
case 123 /* Parameter */:
if ((node.flags & 243 /* Modifier */) === 0) {
return undefined;
}
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement);
case 125 /* Method */:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement);
case 127 /* GetAccessor */:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement);
case 128 /* SetAccessor */:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement);
case 131 /* IndexSignature */:
return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement);
case 192 /* EnumMember */:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement);
case 129 /* CallSignature */:
return createItem(node, "()", ts.ScriptElementKind.callSignatureElement);
case 130 /* ConstructSignature */:
return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement);
case 124 /* Property */:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement);
case 182 /* FunctionDeclaration */:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement);
case 181 /* VariableDeclaration */:
if (node.flags & 4096 /* Const */) {
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.constantElement);
}
else {
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.variableElement);
}
case 126 /* Constructor */:
return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement);
}
return undefined;
function createItem(node, name, scriptElementKind) {
return getNavigationBarItem(name, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)]);
}
}
function isEmpty(text) {
return !text || text.trim() === "";
}
function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) {
if (childItems === void 0) { childItems = []; }
if (indent === void 0) { indent = 0; }
if (isEmpty(text)) {
return undefined;
}
return {
text: text,
kind: kind,
kindModifiers: kindModifiers,
spans: spans,
childItems: childItems,
indent: indent,
bolded: false,
grayed: false
};
}
function createTopLevelItem(node) {
switch (node.kind) {
case 193 /* SourceFile */:
return createSourceFileItem(node);
case 184 /* ClassDeclaration */:
return createClassItem(node);
case 187 /* EnumDeclaration */:
return createEnumItem(node);
case 185 /* InterfaceDeclaration */:
return createIterfaceItem(node);
case 188 /* ModuleDeclaration */:
return createModuleItem(node);
case 182 /* FunctionDeclaration */:
return createFunctionItem(node);
}
return undefined;
function getModuleName(moduleDeclaration) {
if (moduleDeclaration.name.kind === 7 /* StringLiteral */) {
return getTextOfNode(moduleDeclaration.name);
}
var result = [];
result.push(moduleDeclaration.name.text);
while (moduleDeclaration.body && moduleDeclaration.body.kind === 188 /* ModuleDeclaration */) {
moduleDeclaration = moduleDeclaration.body;
result.push(moduleDeclaration.name.text);
}
return result.join(".");
}
function createModuleItem(node) {
var moduleName = getModuleName(node);
var childItems = getItemsWorker(getChildNodes(getInnermostModule(node).body.statements), createChildItem);
return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
function createFunctionItem(node) {
if (node.name && node.body && node.body.kind === 183 /* FunctionBlock */) {
var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem);
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
return undefined;
}
function createSourceFileItem(node) {
var childItems = getItemsWorker(getChildNodes(node.statements), createChildItem);
if (childItems === undefined || childItems.length === 0) {
return undefined;
}
hasGlobalNode = true;
var rootName = ts.isExternalModule(node) ? "\"" + ts.escapeString(ts.getBaseFilename(ts.removeFileExtension(ts.normalizePath(node.filename)))) + "\"" : "<global>";
return getNavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)], childItems);
}
function createClassItem(node) {
var childItems;
if (node.members) {
var constructor = ts.forEach(node.members, function (member) {
return member.kind === 126 /* Constructor */ && member;
});
var nodes = constructor ? node.members.concat(constructor.parameters) : node.members;
var childItems = getItemsWorker(sortNodes(nodes), createChildItem);
}
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.classElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
function createEnumItem(node) {
var childItems = getItemsWorker(sortNodes(node.members), createChildItem);
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.enumElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
function createIterfaceItem(node) {
var childItems = getItemsWorker(sortNodes(node.members), createChildItem);
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.interfaceElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
}
function getInnermostModule(node) {
while (node.body.kind === 188 /* ModuleDeclaration */) {
node = node.body;
}
return node;
}
function getNodeSpan(node) {
return node.kind === 193 /* SourceFile */ ? TypeScript.TextSpan.fromBounds(node.getFullStart(), node.getEnd()) : TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd());
}
function getTextOfNode(node) {
return ts.getTextOfNodeFromSourceText(sourceFile.text, node);
}
}
NavigationBar.getNavigationBarItems = getNavigationBarItems;
})(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {}));
})(ts || (ts = {}));
var TypeScript;
(function (TypeScript) {
var Indentation;
(function (Indentation) {
function columnForPositionInString(input, position, options) {
return columnForPositionInStringWorker(input, position, 0, options);
}
Indentation.columnForPositionInString = columnForPositionInString;
function columnForPositionInStringWorker(input, position, startColumn, options) {
var column = startColumn;
var spacesPerTab = options.spacesPerTab;
for (var j = 0; j < position; j++) {
var ch = input.charCodeAt(j);
if (ch === 9 /* tab */) {
column += spacesPerTab - column % spacesPerTab;
}
else {
column++;
}
}
return column;
}
function indentationString(column, options) {
var numberOfTabs = 0;
var numberOfSpaces = Math.max(0, column);
if (options.useTabs) {
numberOfTabs = Math.floor(column / options.spacesPerTab);
numberOfSpaces -= numberOfTabs * options.spacesPerTab;
}
return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces);
}
Indentation.indentationString = indentationString;
function firstNonWhitespacePosition(value) {
for (var i = 0; i < value.length; i++) {
var ch = value.charCodeAt(i);
if (!TypeScript.CharacterInfo.isWhitespace(ch)) {
return i;
}
}
return value.length;
}
Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition;
})(Indentation = TypeScript.Indentation || (TypeScript.Indentation = {}));
})(TypeScript || (TypeScript = {}));
var ts;
(function (ts) {
var SignatureHelp;
(function (SignatureHelp) {
var emptyArray = [];
function getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken) {
var startingToken = ts.findTokenOnLeftOfPosition(sourceFile, position);
if (!startingToken) {
return undefined;
}
var argumentInfo = getContainingArgumentInfo(startingToken);
cancellationToken.throwIfCancellationRequested();
if (!argumentInfo) {
return undefined;
}
var call = argumentInfo.list.parent;
var candidates = [];
var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates);
cancellationToken.throwIfCancellationRequested();
if (!candidates.length) {
return undefined;
}
return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo);
function getImmediatelyContainingArgumentInfo(node) {
if (node.parent.kind !== 144 /* CallExpression */ && node.parent.kind !== 145 /* NewExpression */) {
return undefined;
}
var parent = node.parent;
if (node.kind === 23 /* LessThanToken */ || node.kind === 15 /* OpenParenToken */) {
var list = getChildListThatStartsWithOpenerToken(parent, node, sourceFile);
ts.Debug.assert(list !== undefined);
return {
list: list,
listItemIndex: 0
};
}
return ts.findListItemInfo(node);
}
function getContainingArgumentInfo(node) {
for (var n = node; n.kind !== 193 /* SourceFile */; n = n.parent) {
if (n.kind === 183 /* FunctionBlock */) {
return undefined;
}
if (n.pos < n.parent.pos || n.end > n.parent.end) {
ts.Debug.fail("Node of kind " + n.kind + " is not a subspan of its parent of kind " + n.parent.kind);
}
var argumentInfo = getImmediatelyContainingArgumentInfo(n);
if (argumentInfo) {
return argumentInfo;
}
}
return undefined;
}
function getChildListThatStartsWithOpenerToken(parent, openerToken, sourceFile) {
var children = parent.getChildren(sourceFile);
var indexOfOpenerToken = children.indexOf(openerToken);
ts.Debug.assert(indexOfOpenerToken >= 0 && children.length > indexOfOpenerToken + 1);
return children[indexOfOpenerToken + 1];
}
function selectBestInvalidOverloadIndex(candidates, argumentCount) {
var maxParamsSignatureIndex = -1;
var maxParams = -1;
for (var i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.hasRestParameter || candidate.parameters.length >= argumentCount) {
return i;
}
if (candidate.parameters.length > maxParams) {
maxParams = candidate.parameters.length;
maxParamsSignatureIndex = i;
}
}
return maxParamsSignatureIndex;
}
function createSignatureHelpItems(candidates, bestSignature, argumentInfoOrTypeArgumentInfo) {
var argumentListOrTypeArgumentList = argumentInfoOrTypeArgumentInfo.list;
var parent = argumentListOrTypeArgumentList.parent;
var isTypeParameterHelp = parent.typeArguments && parent.typeArguments.pos === argumentListOrTypeArgumentList.pos;
ts.Debug.assert(isTypeParameterHelp || parent.arguments.pos === argumentListOrTypeArgumentList.pos);
var callTargetNode = argumentListOrTypeArgumentList.parent.func;
var callTargetSymbol = typeInfoResolver.getSymbolInfo(callTargetNode);
var callTargetDisplayParts = callTargetSymbol && ts.symbolToDisplayParts(typeInfoResolver, callTargetSymbol, undefined, undefined);
var items = ts.map(candidates, function (candidateSignature) {
var signatureHelpParameters;
var prefixParts = [];
var suffixParts = [];
if (callTargetDisplayParts) {
prefixParts.push.apply(prefixParts, callTargetDisplayParts);
}
if (isTypeParameterHelp) {
prefixParts.push(ts.punctuationPart(23 /* LessThanToken */));
var typeParameters = candidateSignature.typeParameters;
signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray;
suffixParts.push(ts.punctuationPart(24 /* GreaterThanToken */));
var parameterParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.parameters, writer, argumentListOrTypeArgumentList); });
suffixParts.push.apply(suffixParts, parameterParts);
}
else {
var typeParameterParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, argumentListOrTypeArgumentList); });
prefixParts.push.apply(prefixParts, typeParameterParts);
prefixParts.push(ts.punctuationPart(15 /* OpenParenToken */));
var parameters = candidateSignature.parameters;
signatureHelpParameters = parameters.length > 0 ? ts.map(parameters, createSignatureHelpParameterForParameter) : emptyArray;
suffixParts.push(ts.punctuationPart(16 /* CloseParenToken */));
}
var returnTypeParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, argumentListOrTypeArgumentList); });
suffixParts.push.apply(suffixParts, returnTypeParts);
return {
isVariadic: candidateSignature.hasRestParameter,
prefixDisplayParts: prefixParts,
suffixDisplayParts: suffixParts,
separatorDisplayParts: [ts.punctuationPart(22 /* CommaToken */), ts.spacePart()],
parameters: signatureHelpParameters,
documentation: candidateSignature.getDocumentationComment()
};
});
var applicableSpanStart = argumentListOrTypeArgumentList.getFullStart();
var applicableSpanEnd = ts.skipTrivia(sourceFile.text, argumentListOrTypeArgumentList.end, false);
var applicableSpan = new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart);
var argumentIndex = (argumentInfoOrTypeArgumentInfo.listItemIndex + 1) >> 1;
var argumentCount = argumentListOrTypeArgumentList.getChildCount() === 0 ? 0 : 1 + ts.countWhere(argumentListOrTypeArgumentList.getChildren(), function (arg) { return arg.kind === 22 /* CommaToken */; });
var selectedItemIndex = candidates.indexOf(bestSignature);
if (selectedItemIndex < 0) {
selectedItemIndex = selectBestInvalidOverloadIndex(candidates, argumentCount);
}
return {
items: items,
applicableSpan: applicableSpan,
selectedItemIndex: selectedItemIndex,
argumentIndex: argumentIndex,
argumentCount: argumentCount
};
function createSignatureHelpParameterForParameter(parameter) {
var displayParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, argumentListOrTypeArgumentList); });
var isOptional = !!(parameter.valueDeclaration.flags & 4 /* QuestionMark */);
return {
name: parameter.name,
documentation: parameter.getDocumentationComment(),
displayParts: displayParts,
isOptional: isOptional
};
}
function createSignatureHelpParameterForTypeParameter(typeParameter) {
var displayParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(typeParameter, writer, argumentListOrTypeArgumentList); });
return {
name: typeParameter.symbol.name,
documentation: emptyArray,
displayParts: displayParts,
isOptional: false
};
}
}
}
SignatureHelp.getSignatureHelpItems = getSignatureHelpItems;
})(SignatureHelp = ts.SignatureHelp || (ts.SignatureHelp = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
function findListItemInfo(node) {
var syntaxList = findContainingList(node);
if (!syntaxList) {
return undefined;
}
var children = syntaxList.getChildren();
var index = ts.indexOf(children, node);
return {
listItemIndex: index,
list: syntaxList
};
}
ts.findListItemInfo = findListItemInfo;
function findChildOfKind(n, kind, sourceFile) {
return ts.forEach(n.getChildren(sourceFile), function (c) { return c.kind === kind && c; });
}
ts.findChildOfKind = findChildOfKind;
function findContainingList(node) {
var syntaxList = ts.forEach(node.parent.getChildren(), function (c) {
if (c.kind === 195 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) {
return c;
}
});
return syntaxList;
}
ts.findContainingList = findContainingList;
function findListItemIndexContainingPosition(list, position) {
ts.Debug.assert(list.kind === 195 /* SyntaxList */);
var children = list.getChildren();
for (var i = 0; i < children.length; i++) {
if (children[i].pos <= position && children[i].end > position) {
return i;
}
}
return -1;
}
ts.findListItemIndexContainingPosition = findListItemIndexContainingPosition;
function getTouchingWord(sourceFile, position) {
return getTouchingToken(sourceFile, position, isWord);
}
ts.getTouchingWord = getTouchingWord;
function getTouchingPropertyName(sourceFile, position) {
return getTouchingToken(sourceFile, position, isPropertyName);
}
ts.getTouchingPropertyName = getTouchingPropertyName;
function getTouchingToken(sourceFile, position, includeItemAtEndPosition) {
return getTokenAtPositionWorker(sourceFile, position, false, includeItemAtEndPosition);
}
ts.getTouchingToken = getTouchingToken;
function getTokenAtPosition(sourceFile, position) {
return getTokenAtPositionWorker(sourceFile, position, true, undefined);
}
ts.getTokenAtPosition = getTokenAtPosition;
function getTokenAtPositionWorker(sourceFile, position, allowPositionInLeadingTrivia, includeItemAtEndPosition) {
var current = sourceFile;
outer: while (true) {
if (isToken(current)) {
return current;
}
for (var i = 0, n = current.getChildCount(sourceFile); i < n; i++) {
var child = current.getChildAt(i);
var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile);
if (start <= position) {
var end = child.getEnd();
if (position < end || (position === end && child.kind === 1 /* EndOfFileToken */)) {
current = child;
continue outer;
}
else if (includeItemAtEndPosition && end === position) {
var previousToken = findPrecedingToken(position, sourceFile, child);
if (previousToken && includeItemAtEndPosition(previousToken)) {
return previousToken;
}
}
}
}
return current;
}
}
function findTokenOnLeftOfPosition(file, position) {
var tokenAtPosition = getTokenAtPosition(file, position);
if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) {
return tokenAtPosition;
}
return findPrecedingToken(position, file);
}
ts.findTokenOnLeftOfPosition = findTokenOnLeftOfPosition;
function findNextToken(previousToken, parent) {
return find(parent);
function find(n) {
if (isToken(n) && n.pos === previousToken.end) {
return n;
}
var children = n.getChildren();
for (var i = 0, len = children.length; i < len; ++i) {
var child = children[i];
var shouldDiveInChildNode = (child.pos <= previousToken.pos && child.end > previousToken.end) || (child.pos === previousToken.end);
if (shouldDiveInChildNode && nodeHasTokens(child)) {
return find(child);
}
}
return undefined;
}
}
ts.findNextToken = findNextToken;
function findPrecedingToken(position, sourceFile, startNode) {
return find(startNode || sourceFile);
function findRightmostToken(n) {
if (isToken(n)) {
return n;
}
var children = n.getChildren();
var candidate = findRightmostChildNodeWithTokens(children, children.length);
return candidate && findRightmostToken(candidate);
}
function find(n) {
if (isToken(n)) {
return n;
}
var children = n.getChildren();
for (var i = 0, len = children.length; i < len; ++i) {
var child = children[i];
if (nodeHasTokens(child)) {
if (position <= child.end) {
if (child.getStart(sourceFile) >= position) {
var candidate = findRightmostChildNodeWithTokens(children, i);
return candidate && findRightmostToken(candidate);
}
else {
return find(child);
}
}
}
}
ts.Debug.assert(startNode !== undefined || n.kind === 193 /* SourceFile */);
if (children.length) {
var candidate = findRightmostChildNodeWithTokens(children, children.length);
return candidate && findRightmostToken(candidate);
}
}
function findRightmostChildNodeWithTokens(children, exclusiveStartPosition) {
for (var i = exclusiveStartPosition - 1; i >= 0; --i) {
if (nodeHasTokens(children[i])) {
return children[i];
}
}
}
}
ts.findPrecedingToken = findPrecedingToken;
function nodeHasTokens(n) {
if (n.kind === 0 /* Unknown */) {
return false;
}
return n.getWidth() !== 0;
}
function getTypeArgumentOrTypeParameterList(node) {
if (node.kind === 132 /* TypeReference */ || node.kind === 144 /* CallExpression */) {
return node.typeArguments;
}
if (ts.isAnyFunction(node) || node.kind === 184 /* ClassDeclaration */ || node.kind === 185 /* InterfaceDeclaration */) {
return node.typeParameters;
}
return undefined;
}
ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList;
function isToken(n) {
return n.kind >= 1 /* FirstToken */ && n.kind <= 119 /* LastToken */;
}
ts.isToken = isToken;
function isWord(n) {
return n.kind === 63 /* Identifier */ || ts.isKeyword(n.kind);
}
function isPropertyName(n) {
return n.kind === 7 /* StringLiteral */ || n.kind === 6 /* NumericLiteral */ || isWord(n);
}
function isComment(n) {
return n.kind === 2 /* SingleLineCommentTrivia */ || n.kind === 3 /* MultiLineCommentTrivia */;
}
ts.isComment = isComment;
function isPunctuation(n) {
return 13 /* FirstPunctuation */ <= n.kind && n.kind <= 62 /* LastPunctuation */;
}
ts.isPunctuation = isPunctuation;
})(ts || (ts = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var TextSnapshot = (function () {
function TextSnapshot(snapshot) {
this.snapshot = snapshot;
this.lines = [];
}
TextSnapshot.prototype.getLength = function () {
return this.snapshot.length();
};
TextSnapshot.prototype.getText = function (span) {
return this.snapshot.substr(span.start(), span.length());
};
TextSnapshot.prototype.getLineNumberFromPosition = function (position) {
return this.snapshot.lineMap().getLineNumberFromPosition(position);
};
TextSnapshot.prototype.getLineFromPosition = function (position) {
var lineNumber = this.getLineNumberFromPosition(position);
return this.getLineFromLineNumber(lineNumber);
};
TextSnapshot.prototype.getLineFromLineNumber = function (lineNumber) {
var line = this.lines[lineNumber];
if (line === undefined) {
line = this.getLineFromLineNumberWorker(lineNumber);
this.lines[lineNumber] = line;
}
return line;
};
TextSnapshot.prototype.getLineFromLineNumberWorker = function (lineNumber) {
var lineMap = this.snapshot.lineMap().lineStarts();
var lineMapIndex = lineNumber;
if (lineMapIndex < 0 || lineMapIndex >= lineMap.length)
throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Invalid_line_number_0, [lineMapIndex]));
var start = lineMap[lineMapIndex];
var end;
var endIncludingLineBreak;
var lineBreak = "";
if (lineMapIndex == lineMap.length) {
end = endIncludingLineBreak = this.snapshot.length();
}
else {
endIncludingLineBreak = (lineMapIndex >= lineMap.length - 1 ? this.snapshot.length() : lineMap[lineMapIndex + 1]);
for (var p = endIncludingLineBreak - 1; p >= start; p--) {
var c = this.snapshot.substr(p, 1);
if (c != "\r" && c != "\n") {
break;
}
}
end = p + 1;
lineBreak = this.snapshot.substr(end, endIncludingLineBreak - end);
}
var result = new Formatting.TextSnapshotLine(this, lineNumber, start, end, lineBreak);
return result;
};
return TextSnapshot;
})();
Formatting.TextSnapshot = TextSnapshot;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var TextSnapshotLine = (function () {
function TextSnapshotLine(_snapshot, _lineNumber, _start, _end, _lineBreak) {
this._snapshot = _snapshot;
this._lineNumber = _lineNumber;
this._start = _start;
this._end = _end;
this._lineBreak = _lineBreak;
}
TextSnapshotLine.prototype.snapshot = function () {
return this._snapshot;
};
TextSnapshotLine.prototype.start = function () {
return new Formatting.SnapshotPoint(this._snapshot, this._start);
};
TextSnapshotLine.prototype.startPosition = function () {
return this._start;
};
TextSnapshotLine.prototype.end = function () {
return new Formatting.SnapshotPoint(this._snapshot, this._end);
};
TextSnapshotLine.prototype.endPosition = function () {
return this._end;
};
TextSnapshotLine.prototype.endIncludingLineBreak = function () {
return new Formatting.SnapshotPoint(this._snapshot, this._end + this._lineBreak.length);
};
TextSnapshotLine.prototype.endIncludingLineBreakPosition = function () {
return this._end + this._lineBreak.length;
};
TextSnapshotLine.prototype.length = function () {
return this._end - this._start;
};
TextSnapshotLine.prototype.lineNumber = function () {
return this._lineNumber;
};
TextSnapshotLine.prototype.getText = function () {
return this._snapshot.getText(TypeScript.TextSpan.fromBounds(this._start, this._end));
};
return TextSnapshotLine;
})();
Formatting.TextSnapshotLine = TextSnapshotLine;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var SnapshotPoint = (function () {
function SnapshotPoint(snapshot, position) {
this.snapshot = snapshot;
this.position = position;
}
SnapshotPoint.prototype.getContainingLine = function () {
return this.snapshot.getLineFromPosition(this.position);
};
SnapshotPoint.prototype.add = function (offset) {
return new SnapshotPoint(this.snapshot, this.position + offset);
};
return SnapshotPoint;
})();
Formatting.SnapshotPoint = SnapshotPoint;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var FormattingContext = (function () {
function FormattingContext(snapshot, formattingRequestKind) {
this.snapshot = snapshot;
this.formattingRequestKind = formattingRequestKind;
this.currentTokenSpan = null;
this.nextTokenSpan = null;
this.contextNode = null;
this.currentTokenParent = null;
this.nextTokenParent = null;
this.contextNodeAllOnSameLine = null;
this.nextNodeAllOnSameLine = null;
this.tokensAreOnSameLine = null;
this.contextNodeBlockIsOnOneLine = null;
this.nextNodeBlockIsOnOneLine = null;
TypeScript.Debug.assert(this.snapshot != null, "snapshot is null");
}
FormattingContext.prototype.updateContext = function (currentTokenSpan, currentTokenParent, nextTokenSpan, nextTokenParent, commonParent) {
TypeScript.Debug.assert(currentTokenSpan != null, "currentTokenSpan is null");
TypeScript.Debug.assert(currentTokenParent != null, "currentTokenParent is null");
TypeScript.Debug.assert(nextTokenSpan != null, "nextTokenSpan is null");
TypeScript.Debug.assert(nextTokenParent != null, "nextTokenParent is null");
TypeScript.Debug.assert(commonParent != null, "commonParent is null");
this.currentTokenSpan = currentTokenSpan;
this.currentTokenParent = currentTokenParent;
this.nextTokenSpan = nextTokenSpan;
this.nextTokenParent = nextTokenParent;
this.contextNode = commonParent;
this.contextNodeAllOnSameLine = null;
this.nextNodeAllOnSameLine = null;
this.tokensAreOnSameLine = null;
this.contextNodeBlockIsOnOneLine = null;
this.nextNodeBlockIsOnOneLine = null;
};
FormattingContext.prototype.ContextNodeAllOnSameLine = function () {
if (this.contextNodeAllOnSameLine === null) {
this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode);
}
return this.contextNodeAllOnSameLine;
};
FormattingContext.prototype.NextNodeAllOnSameLine = function () {
if (this.nextNodeAllOnSameLine === null) {
this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent);
}
return this.nextNodeAllOnSameLine;
};
FormattingContext.prototype.TokensAreOnSameLine = function () {
if (this.tokensAreOnSameLine === null) {
var startLine = this.snapshot.getLineNumberFromPosition(this.currentTokenSpan.start());
var endLine = this.snapshot.getLineNumberFromPosition(this.nextTokenSpan.start());
this.tokensAreOnSameLine = (startLine == endLine);
}
return this.tokensAreOnSameLine;
};
FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () {
if (this.contextNodeBlockIsOnOneLine === null) {
this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode);
}
return this.contextNodeBlockIsOnOneLine;
};
FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () {
if (this.nextNodeBlockIsOnOneLine === null) {
this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent);
}
return this.nextNodeBlockIsOnOneLine;
};
FormattingContext.prototype.NodeIsOnOneLine = function (node) {
var startLine = this.snapshot.getLineNumberFromPosition(node.start());
var endLine = this.snapshot.getLineNumberFromPosition(node.end());
return startLine == endLine;
};
FormattingContext.prototype.BlockIsOnOneLine = function (node) {
var block = node.node();
return this.snapshot.getLineNumberFromPosition(TypeScript.fullEnd(block.openBraceToken)) === this.snapshot.getLineNumberFromPosition(TypeScript.start(block.closeBraceToken));
};
return FormattingContext;
})();
Formatting.FormattingContext = FormattingContext;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var FormattingManager = (function () {
function FormattingManager(syntaxTree, snapshot, rulesProvider, editorOptions) {
this.syntaxTree = syntaxTree;
this.snapshot = snapshot;
this.rulesProvider = rulesProvider;
this.options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter);
}
FormattingManager.prototype.formatSelection = function (minChar, limChar) {
var span = TypeScript.TextSpan.fromBounds(minChar, limChar);
return this.formatSpan(span, 1 /* FormatSelection */);
};
FormattingManager.prototype.formatDocument = function () {
var span = TypeScript.TextSpan.fromBounds(0, this.snapshot.getLength());
return this.formatSpan(span, 0 /* FormatDocument */);
};
FormattingManager.prototype.formatOnSemicolon = function (caretPosition) {
var sourceUnit = this.syntaxTree.sourceUnit();
var semicolonPositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1);
if (semicolonPositionedToken.kind === 80 /* SemicolonToken */) {
var current = semicolonPositionedToken;
while (current.parent !== null && TypeScript.fullEnd(current.parent) === TypeScript.fullEnd(semicolonPositionedToken) && current.parent.kind !== 1 /* List */) {
current = current.parent;
}
var span = new TypeScript.TextSpan(TypeScript.fullStart(current), TypeScript.fullWidth(current));
return this.formatSpan(span, 3 /* FormatOnSemicolon */);
}
return [];
};
FormattingManager.prototype.formatOnClosingCurlyBrace = function (caretPosition) {
var sourceUnit = this.syntaxTree.sourceUnit();
var closeBracePositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1);
if (closeBracePositionedToken.kind === 73 /* CloseBraceToken */) {
var current = closeBracePositionedToken;
while (current.parent !== null && TypeScript.fullEnd(current.parent) === TypeScript.fullEnd(closeBracePositionedToken) && current.parent.kind !== 1 /* List */) {
current = current.parent;
}
var span = new TypeScript.TextSpan(TypeScript.fullStart(current), TypeScript.fullWidth(current));
return this.formatSpan(span, 4 /* FormatOnClosingCurlyBrace */);
}
return [];
};
FormattingManager.prototype.formatOnEnter = function (caretPosition) {
var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition);
if (lineNumber > 0) {
var prevLine = this.snapshot.getLineFromLineNumber(lineNumber - 1);
var currentLine = this.snapshot.getLineFromLineNumber(lineNumber);
var span = TypeScript.TextSpan.fromBounds(prevLine.startPosition(), currentLine.endPosition());
return this.formatSpan(span, 2 /* FormatOnEnter */);
}
return [];
};
FormattingManager.prototype.formatSpan = function (span, formattingRequestKind) {
var startLine = this.snapshot.getLineFromPosition(span.start());
span = TypeScript.TextSpan.fromBounds(startLine.startPosition(), span.end());
var result = [];
var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind);
formattingEdits.forEach(function (item) {
result.push({
span: new TypeScript.TextSpan(item.position, item.length),
newText: item.replaceWith
});
});
return result;
};
return FormattingManager;
})();
Formatting.FormattingManager = FormattingManager;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
(function (FormattingRequestKind) {
FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument";
FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection";
FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter";
FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon";
FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace";
FormattingRequestKind[FormattingRequestKind["FormatOnPaste"] = 5] = "FormatOnPaste";
})(Formatting.FormattingRequestKind || (Formatting.FormattingRequestKind = {}));
var FormattingRequestKind = Formatting.FormattingRequestKind;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var Rule = (function () {
function Rule(Descriptor, Operation, Flag) {
if (Flag === void 0) { Flag = 0 /* None */; }
this.Descriptor = Descriptor;
this.Operation = Operation;
this.Flag = Flag;
}
Rule.prototype.toString = function () {
return "[desc=" + this.Descriptor + "," + "operation=" + this.Operation + "," + "flag=" + this.Flag + "]";
};
return Rule;
})();
Formatting.Rule = Rule;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
(function (RuleAction) {
RuleAction[RuleAction["Ignore"] = 0] = "Ignore";
RuleAction[RuleAction["Space"] = 1] = "Space";
RuleAction[RuleAction["NewLine"] = 2] = "NewLine";
RuleAction[RuleAction["Delete"] = 3] = "Delete";
})(Formatting.RuleAction || (Formatting.RuleAction = {}));
var RuleAction = Formatting.RuleAction;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var RuleDescriptor = (function () {
function RuleDescriptor(LeftTokenRange, RightTokenRange) {
this.LeftTokenRange = LeftTokenRange;
this.RightTokenRange = RightTokenRange;
}
RuleDescriptor.prototype.toString = function () {
return "[leftRange=" + this.LeftTokenRange + "," + "rightRange=" + this.RightTokenRange + "]";
};
RuleDescriptor.create1 = function (left, right) {
return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), Formatting.Shared.TokenRange.FromToken(right));
};
RuleDescriptor.create2 = function (left, right) {
return RuleDescriptor.create4(left, Formatting.Shared.TokenRange.FromToken(right));
};
RuleDescriptor.create3 = function (left, right) {
return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), right);
};
RuleDescriptor.create4 = function (left, right) {
return new RuleDescriptor(left, right);
};
return RuleDescriptor;
})();
Formatting.RuleDescriptor = RuleDescriptor;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
(function (RuleFlags) {
RuleFlags[RuleFlags["None"] = 0] = "None";
RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines";
})(Formatting.RuleFlags || (Formatting.RuleFlags = {}));
var RuleFlags = Formatting.RuleFlags;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var RuleOperation = (function () {
function RuleOperation() {
this.Context = null;
this.Action = null;
}
RuleOperation.prototype.toString = function () {
return "[context=" + this.Context + "," + "action=" + this.Action + "]";
};
RuleOperation.create1 = function (action) {
return RuleOperation.create2(Formatting.RuleOperationContext.Any, action);
};
RuleOperation.create2 = function (context, action) {
var result = new RuleOperation();
result.Context = context;
result.Action = action;
return result;
};
return RuleOperation;
})();
Formatting.RuleOperation = RuleOperation;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var RuleOperationContext = (function () {
function RuleOperationContext() {
var funcs = [];
for (var _i = 0; _i < arguments.length; _i++) {
funcs[_i - 0] = arguments[_i];
}
this.customContextChecks = funcs;
}
RuleOperationContext.prototype.IsAny = function () {
return this == RuleOperationContext.Any;
};
RuleOperationContext.prototype.InContext = function (context) {
if (this.IsAny()) {
return true;
}
for (var i = 0, len = this.customContextChecks.length; i < len; i++) {
if (!this.customContextChecks[i](context)) {
return false;
}
}
return true;
};
RuleOperationContext.Any = new RuleOperationContext();
return RuleOperationContext;
})();
Formatting.RuleOperationContext = RuleOperationContext;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var Rules = (function () {
function Rules() {
this.IgnoreBeforeComment = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.Comments), Formatting.RuleOperation.create1(0 /* Ignore */));
this.IgnoreAfterLineComment = new Formatting.Rule(Formatting.RuleDescriptor.create3(5 /* SingleLineCommentTrivia */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create1(0 /* Ignore */));
this.NoSpaceBeforeSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 80 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeColon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 108 /* ColonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */));
this.NoSpaceBeforeQMark = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 107 /* QuestionToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */));
this.SpaceAfterColon = new Formatting.Rule(Formatting.RuleDescriptor.create3(108 /* ColonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */));
this.SpaceAfterQMark = new Formatting.Rule(Formatting.RuleDescriptor.create3(107 /* QuestionToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */));
this.SpaceAfterSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.SpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(73 /* CloseBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 1 /* Space */));
this.SpaceBetweenCloseBraceAndElse = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseBraceToken */, 25 /* ElseKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.SpaceBetweenCloseBraceAndWhile = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseBraceToken */, 44 /* WhileKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.NoSpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(73 /* CloseBraceToken */, Formatting.Shared.TokenRange.FromTokens([75 /* CloseParenToken */, 77 /* CloseBracketToken */, 81 /* CommaToken */, 80 /* SemicolonToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeDot = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 78 /* DotToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterDot = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* DotToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 76 /* OpenBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(76 /* OpenBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 77 /* CloseBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(77 /* CloseBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.FunctionOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.AnyIncludingMultilineComments;
this.SpaceBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */);
this.TypeScriptOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([9 /* IdentifierName */, 4 /* MultiLineCommentTrivia */]);
this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */);
this.ControlOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([75 /* CloseParenToken */, 4 /* MultiLineCommentTrivia */, 24 /* DoKeyword */, 40 /* TryKeyword */, 27 /* FinallyKeyword */, 25 /* ElseKeyword */]);
this.SpaceBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */);
this.SpaceAfterOpenBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */));
this.SpaceBeforeCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */));
this.NoSpaceBetweenEmptyBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenBraceToken */, 73 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 3 /* Delete */));
this.NewLineAfterOpenBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */));
this.NewLineBeforeCloseBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.AnyIncludingMultilineComments, 73 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */));
this.NoSpaceAfterUnaryPrefixOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.UnaryPrefixOperators, Formatting.Shared.TokenRange.UnaryPrefixExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */));
this.NoSpaceAfterUnaryPreincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(95 /* PlusPlusToken */, Formatting.Shared.TokenRange.UnaryPreincrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterUnaryPredecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(96 /* MinusMinusToken */, Formatting.Shared.TokenRange.UnaryPredecrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeUnaryPostincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostincrementExpressions, 95 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeUnaryPostdecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 96 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.SpaceAfterPostincrementWhenFollowedByAdd = new Formatting.Rule(Formatting.RuleDescriptor.create1(95 /* PlusPlusToken */, 91 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterAddWhenFollowedByUnaryPlus = new Formatting.Rule(Formatting.RuleDescriptor.create1(91 /* PlusToken */, 91 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterAddWhenFollowedByPreincrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(91 /* PlusToken */, 95 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterPostdecrementWhenFollowedBySubtract = new Formatting.Rule(Formatting.RuleDescriptor.create1(96 /* MinusMinusToken */, 92 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new Formatting.Rule(Formatting.RuleDescriptor.create1(92 /* MinusToken */, 92 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterSubtractWhenFollowedByPredecrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(92 /* MinusToken */, 96 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.NoSpaceBeforeComma = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 81 /* CommaToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.SpaceAfterCertainKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([42 /* VarKeyword */, 38 /* ThrowKeyword */, 33 /* NewKeyword */, 23 /* DeleteKeyword */, 35 /* ReturnKeyword */, 41 /* TypeOfKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.NoSpaceBeforeOpenParenInFuncCall = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext), 3 /* Delete */));
this.SpaceAfterFunctionInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create3(29 /* FunctionKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */));
this.NoSpaceBeforeOpenParenInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 3 /* Delete */));
this.SpaceAfterVoidOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(43 /* VoidKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 1 /* Space */));
this.NoSpaceBetweenReturnAndSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create1(35 /* ReturnKeyword */, 80 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.SpaceBetweenStatements = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([75 /* CloseParenToken */, 24 /* DoKeyword */, 25 /* ElseKeyword */, 18 /* CaseKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 1 /* Space */));
this.SpaceAfterTryFinally = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([40 /* TryKeyword */, 27 /* FinallyKeyword */]), 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.SpaceAfterGetSetInMember = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([66 /* GetKeyword */, 70 /* SetKeyword */]), 9 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */));
this.SpaceBeforeBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryKeywordOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryKeywordOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.NoSpaceAfterConstructor = new Formatting.Rule(Formatting.RuleDescriptor.create1(64 /* ConstructorKeyword */, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterModuleImport = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([67 /* ModuleKeyword */, 68 /* RequireKeyword */]), 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.SpaceAfterCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([46 /* ClassKeyword */, 65 /* DeclareKeyword */, 48 /* EnumKeyword */, 49 /* ExportKeyword */, 50 /* ExtendsKeyword */, 66 /* GetKeyword */, 53 /* ImplementsKeyword */, 51 /* ImportKeyword */, 54 /* InterfaceKeyword */, 67 /* ModuleKeyword */, 57 /* PrivateKeyword */, 59 /* PublicKeyword */, 70 /* SetKeyword */, 60 /* StaticKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.SpaceBeforeCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.FromTokens([50 /* ExtendsKeyword */, 53 /* ImplementsKeyword */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.SpaceAfterModuleName = new Formatting.Rule(Formatting.RuleDescriptor.create1(12 /* StringLiteral */, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsModuleDeclContext), 1 /* Space */));
this.SpaceAfterArrow = new Formatting.Rule(Formatting.RuleDescriptor.create3(87 /* EqualsGreaterThanToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.NoSpaceAfterEllipsis = new Formatting.Rule(Formatting.RuleDescriptor.create1(79 /* DotDotDotToken */, 9 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterOptionalParameters = new Formatting.Rule(Formatting.RuleDescriptor.create3(107 /* QuestionToken */, Formatting.Shared.TokenRange.FromTokens([75 /* CloseParenToken */, 81 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */));
this.NoSpaceBeforeOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.TypeNames, 82 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */));
this.NoSpaceBetweenCloseParenAndAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create1(75 /* CloseParenToken */, 82 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */));
this.NoSpaceAfterOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(82 /* LessThanToken */, Formatting.Shared.TokenRange.TypeNames), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */));
this.NoSpaceBeforeCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 83 /* GreaterThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */));
this.NoSpaceAfterCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(83 /* GreaterThanToken */, Formatting.Shared.TokenRange.FromTokens([74 /* OpenParenToken */, 76 /* OpenBracketToken */, 83 /* GreaterThanToken */, 81 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */));
this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenBraceToken */, 73 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 3 /* Delete */));
this.HighPriorityCommonRules = [
this.IgnoreBeforeComment,
this.IgnoreAfterLineComment,
this.NoSpaceBeforeColon,
this.SpaceAfterColon,
this.NoSpaceBeforeQMark,
this.SpaceAfterQMark,
this.NoSpaceBeforeDot,
this.NoSpaceAfterDot,
this.NoSpaceAfterUnaryPrefixOperator,
this.NoSpaceAfterUnaryPreincrementOperator,
this.NoSpaceAfterUnaryPredecrementOperator,
this.NoSpaceBeforeUnaryPostincrementOperator,
this.NoSpaceBeforeUnaryPostdecrementOperator,
this.SpaceAfterPostincrementWhenFollowedByAdd,
this.SpaceAfterAddWhenFollowedByUnaryPlus,
this.SpaceAfterAddWhenFollowedByPreincrement,
this.SpaceAfterPostdecrementWhenFollowedBySubtract,
this.SpaceAfterSubtractWhenFollowedByUnaryMinus,
this.SpaceAfterSubtractWhenFollowedByPredecrement,
this.NoSpaceAfterCloseBrace,
this.SpaceAfterOpenBrace,
this.SpaceBeforeCloseBrace,
this.NewLineBeforeCloseBraceInBlockContext,
this.SpaceAfterCloseBrace,
this.SpaceBetweenCloseBraceAndElse,
this.SpaceBetweenCloseBraceAndWhile,
this.NoSpaceBetweenEmptyBraceBrackets,
this.SpaceAfterFunctionInFuncDecl,
this.NewLineAfterOpenBraceInBlockContext,
this.SpaceAfterGetSetInMember,
this.NoSpaceBetweenReturnAndSemicolon,
this.SpaceAfterCertainKeywords,
this.NoSpaceBeforeOpenParenInFuncCall,
this.SpaceBeforeBinaryKeywordOperator,
this.SpaceAfterBinaryKeywordOperator,
this.SpaceAfterVoidOperator,
this.NoSpaceAfterConstructor,
this.NoSpaceAfterModuleImport,
this.SpaceAfterCertainTypeScriptKeywords,
this.SpaceBeforeCertainTypeScriptKeywords,
this.SpaceAfterModuleName,
this.SpaceAfterArrow,
this.NoSpaceAfterEllipsis,
this.NoSpaceAfterOptionalParameters,
this.NoSpaceBetweenEmptyInterfaceBraceBrackets,
this.NoSpaceBeforeOpenAngularBracket,
this.NoSpaceBetweenCloseParenAndAngularBracket,
this.NoSpaceAfterOpenAngularBracket,
this.NoSpaceBeforeCloseAngularBracket,
this.NoSpaceAfterCloseAngularBracket
];
this.LowPriorityCommonRules = [
this.NoSpaceBeforeSemicolon,
this.SpaceBeforeOpenBraceInControl,
this.SpaceBeforeOpenBraceInFunction,
this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock,
this.NoSpaceBeforeComma,
this.NoSpaceBeforeOpenBracket,
this.NoSpaceAfterOpenBracket,
this.NoSpaceBeforeCloseBracket,
this.NoSpaceAfterCloseBracket,
this.SpaceAfterSemicolon,
this.NoSpaceBeforeOpenParenInFuncDecl,
this.SpaceBetweenStatements,
this.SpaceAfterTryFinally
];
this.SpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.NoSpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.SpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.SpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */));
this.NoSpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */));
this.NoSpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */));
this.SpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 1 /* Space */));
this.NoSpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 3 /* Delete */));
this.NewLineBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */);
this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */);
this.NewLineBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 72 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */);
this.SpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 1 /* Space */));
this.NoSpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 3 /* Delete */));
this.SpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.SpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */));
this.NoSpaceBetweenParens = new Formatting.Rule(Formatting.RuleDescriptor.create1(74 /* OpenParenToken */, 75 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.NoSpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */));
this.SpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(29 /* FunctionKeyword */, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */));
this.NoSpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(29 /* FunctionKeyword */, 74 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 3 /* Delete */));
}
Rules.prototype.getRuleName = function (rule) {
var o = this;
for (var name in o) {
if (o[name] === rule) {
return name;
}
}
throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_rule, null));
};
Rules.IsForContext = function (context) {
return context.contextNode.kind() === 159 /* ForStatement */;
};
Rules.IsNotForContext = function (context) {
return !Rules.IsForContext(context);
};
Rules.IsBinaryOpContext = function (context) {
switch (context.contextNode.kind()) {
case 174 /* BinaryExpression */:
case 173 /* ConditionalExpression */:
return true;
case 138 /* ImportDeclaration */:
case 191 /* VariableDeclarator */:
case 197 /* EqualsValueClause */:
return context.currentTokenSpan.kind === 109 /* EqualsToken */ || context.nextTokenSpan.kind === 109 /* EqualsToken */;
case 160 /* ForInStatement */:
return context.currentTokenSpan.kind === 31 /* InKeyword */ || context.nextTokenSpan.kind === 31 /* InKeyword */;
}
return false;
};
Rules.IsNotBinaryOpContext = function (context) {
return !Rules.IsBinaryOpContext(context);
};
Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) {
return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context);
};
Rules.IsBeforeMultilineBlockContext = function (context) {
return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine());
};
Rules.IsMultilineBlockContext = function (context) {
return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine());
};
Rules.IsSingleLineBlockContext = function (context) {
return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine());
};
Rules.IsBlockContext = function (context) {
return Rules.NodeIsBlockContext(context.contextNode);
};
Rules.IsBeforeBlockContext = function (context) {
return Rules.NodeIsBlockContext(context.nextTokenParent);
};
Rules.NodeIsBlockContext = function (node) {
if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) {
return true;
}
switch (node.kind()) {
case 151 /* Block */:
case 156 /* SwitchStatement */:
case 179 /* ObjectLiteralExpression */:
return true;
}
return false;
};
Rules.IsFunctionDeclContext = function (context) {
switch (context.contextNode.kind()) {
case 134 /* FunctionDeclaration */:
case 140 /* MemberFunctionDeclaration */:
case 144 /* GetAccessor */:
case 145 /* SetAccessor */:
case 150 /* MethodSignature */:
case 147 /* CallSignature */:
case 186 /* FunctionExpression */:
case 142 /* ConstructorDeclaration */:
case 183 /* SimpleArrowFunctionExpression */:
case 182 /* ParenthesizedArrowFunctionExpression */:
case 133 /* InterfaceDeclaration */:
return true;
}
return false;
};
Rules.IsTypeScriptDeclWithBlockContext = function (context) {
return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode);
};
Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) {
switch (node.kind()) {
case 136 /* ClassDeclaration */:
case 137 /* EnumDeclaration */:
case 124 /* ObjectType */:
case 135 /* ModuleDeclaration */:
return true;
}
return false;
};
Rules.IsAfterCodeBlockContext = function (context) {
switch (context.currentTokenParent.kind()) {
case 136 /* ClassDeclaration */:
case 135 /* ModuleDeclaration */:
case 137 /* EnumDeclaration */:
case 151 /* Block */:
case 156 /* SwitchStatement */:
return true;
}
return false;
};
Rules.IsControlDeclContext = function (context) {
switch (context.contextNode.kind()) {
case 152 /* IfStatement */:
case 156 /* SwitchStatement */:
case 159 /* ForStatement */:
case 160 /* ForInStatement */:
case 163 /* WhileStatement */:
case 164 /* TryStatement */:
case 166 /* DoStatement */:
case 168 /* WithStatement */:
case 200 /* ElseClause */:
case 201 /* CatchClause */:
case 202 /* FinallyClause */:
return true;
default:
return false;
}
};
Rules.IsObjectContext = function (context) {
return context.contextNode.kind() === 179 /* ObjectLiteralExpression */;
};
Rules.IsFunctionCallContext = function (context) {
return context.contextNode.kind() === 177 /* InvocationExpression */;
};
Rules.IsNewContext = function (context) {
return context.contextNode.kind() === 180 /* ObjectCreationExpression */;
};
Rules.IsFunctionCallOrNewContext = function (context) {
return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context);
};
Rules.IsSameLineTokenContext = function (context) {
return context.TokensAreOnSameLine();
};
Rules.IsNotFormatOnEnter = function (context) {
return context.formattingRequestKind != 2 /* FormatOnEnter */;
};
Rules.IsModuleDeclContext = function (context) {
return context.contextNode.kind() === 135 /* ModuleDeclaration */;
};
Rules.IsObjectTypeContext = function (context) {
return context.contextNode.kind() === 124 /* ObjectType */ && context.contextNode.parent().kind() !== 133 /* InterfaceDeclaration */;
};
Rules.IsTypeArgumentOrParameter = function (tokenKind, parentKind) {
return ((tokenKind === 82 /* LessThanToken */ || tokenKind === 83 /* GreaterThanToken */) && (parentKind === 195 /* TypeParameterList */ || parentKind === 194 /* TypeArgumentList */));
};
Rules.IsTypeArgumentOrParameterContext = function (context) {
return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan.kind, context.currentTokenParent.kind()) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan.kind, context.nextTokenParent.kind());
};
Rules.IsVoidOpContext = function (context) {
return context.currentTokenSpan.kind === 43 /* VoidKeyword */ && context.currentTokenParent.kind() === 172 /* VoidExpression */;
};
return Rules;
})();
Formatting.Rules = Rules;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var RulesMap = (function () {
function RulesMap() {
this.map = [];
this.mapRowLength = 0;
}
RulesMap.create = function (rules) {
var result = new RulesMap();
result.Initialize(rules);
return result;
};
RulesMap.prototype.Initialize = function (rules) {
this.mapRowLength = TypeScript.SyntaxKind.LastToken + 1;
this.map = new Array(this.mapRowLength * this.mapRowLength);
var rulesBucketConstructionStateList = new Array(this.map.length);
this.FillRules(rules, rulesBucketConstructionStateList);
return this.map;
};
RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) {
var _this = this;
rules.forEach(function (rule) {
_this.FillRule(rule, rulesBucketConstructionStateList);
});
};
RulesMap.prototype.GetRuleBucketIndex = function (row, column) {
var rulesBucketIndex = (row * this.mapRowLength) + column;
return rulesBucketIndex;
};
RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) {
var _this = this;
var specificRule = rule.Descriptor.LeftTokenRange != Formatting.Shared.TokenRange.Any && rule.Descriptor.RightTokenRange != Formatting.Shared.TokenRange.Any;
rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) {
rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) {
var rulesBucketIndex = _this.GetRuleBucketIndex(left, right);
var rulesBucket = _this.map[rulesBucketIndex];
if (rulesBucket == undefined) {
rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket();
}
rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex);
});
});
};
RulesMap.prototype.GetRule = function (context) {
var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind);
var bucket = this.map[bucketIndex];
if (bucket != null) {
for (var i = 0, len = bucket.Rules().length; i < len; i++) {
var rule = bucket.Rules()[i];
if (rule.Operation.Context.InContext(context))
return rule;
}
}
return null;
};
return RulesMap;
})();
Formatting.RulesMap = RulesMap;
var MaskBitSize = 5;
var Mask = 0x1f;
(function (RulesPosition) {
RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific";
RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny";
RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific";
RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny";
RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific";
RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny";
})(Formatting.RulesPosition || (Formatting.RulesPosition = {}));
var RulesPosition = Formatting.RulesPosition;
var RulesBucketConstructionState = (function () {
function RulesBucketConstructionState() {
this.rulesInsertionIndexBitmap = 0;
}
RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) {
var index = 0;
var pos = 0;
var indexBitmap = this.rulesInsertionIndexBitmap;
while (pos <= maskPosition) {
index += (indexBitmap & Mask);
indexBitmap >>= MaskBitSize;
pos += MaskBitSize;
}
return index;
};
RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) {
var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask;
value++;
TypeScript.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules.");
var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition);
temp |= value << maskPosition;
this.rulesInsertionIndexBitmap = temp;
};
return RulesBucketConstructionState;
})();
Formatting.RulesBucketConstructionState = RulesBucketConstructionState;
var RulesBucket = (function () {
function RulesBucket() {
this.rules = [];
}
RulesBucket.prototype.Rules = function () {
return this.rules;
};
RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) {
var position;
if (rule.Operation.Action == 0 /* Ignore */) {
position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny;
}
else if (!rule.Operation.Context.IsAny()) {
position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny;
}
else {
position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny;
}
var state = constructionState[rulesBucketIndex];
if (state === undefined) {
state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState();
}
var index = state.GetInsertionIndex(position);
this.rules.splice(index, 0, rule);
state.IncreaseInsertionIndex(position);
};
return RulesBucket;
})();
Formatting.RulesBucket = RulesBucket;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var RulesProvider = (function () {
function RulesProvider(logger) {
this.logger = logger;
this.globalRules = new Formatting.Rules();
}
RulesProvider.prototype.getRuleName = function (rule) {
return this.globalRules.getRuleName(rule);
};
RulesProvider.prototype.getRuleByName = function (name) {
return this.globalRules[name];
};
RulesProvider.prototype.getRulesMap = function () {
return this.rulesMap;
};
RulesProvider.prototype.ensureUpToDate = function (options) {
if (this.options == null || !ts.compareDataObjects(this.options, options)) {
var activeRules = this.createActiveRules(options);
var rulesMap = Formatting.RulesMap.create(activeRules);
this.activeRules = activeRules;
this.rulesMap = rulesMap;
this.options = ts.clone(options);
}
};
RulesProvider.prototype.createActiveRules = function (options) {
var rules = this.globalRules.HighPriorityCommonRules.slice(0);
if (options.InsertSpaceAfterCommaDelimiter) {
rules.push(this.globalRules.SpaceAfterComma);
}
else {
rules.push(this.globalRules.NoSpaceAfterComma);
}
if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) {
rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword);
}
else {
rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword);
}
if (options.InsertSpaceAfterKeywordsInControlFlowStatements) {
rules.push(this.globalRules.SpaceAfterKeywordInControl);
}
else {
rules.push(this.globalRules.NoSpaceAfterKeywordInControl);
}
if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) {
rules.push(this.globalRules.SpaceAfterOpenParen);
rules.push(this.globalRules.SpaceBeforeCloseParen);
rules.push(this.globalRules.NoSpaceBetweenParens);
}
else {
rules.push(this.globalRules.NoSpaceAfterOpenParen);
rules.push(this.globalRules.NoSpaceBeforeCloseParen);
rules.push(this.globalRules.NoSpaceBetweenParens);
}
if (options.InsertSpaceAfterSemicolonInForStatements) {
rules.push(this.globalRules.SpaceAfterSemicolonInFor);
}
else {
rules.push(this.globalRules.NoSpaceAfterSemicolonInFor);
}
if (options.InsertSpaceBeforeAndAfterBinaryOperators) {
rules.push(this.globalRules.SpaceBeforeBinaryOperator);
rules.push(this.globalRules.SpaceAfterBinaryOperator);
}
else {
rules.push(this.globalRules.NoSpaceBeforeBinaryOperator);
rules.push(this.globalRules.NoSpaceAfterBinaryOperator);
}
if (options.PlaceOpenBraceOnNewLineForControlBlocks) {
rules.push(this.globalRules.NewLineBeforeOpenBraceInControl);
}
if (options.PlaceOpenBraceOnNewLineForFunctions) {
rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction);
rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock);
}
rules = rules.concat(this.globalRules.LowPriorityCommonRules);
return rules;
};
return RulesProvider;
})();
Formatting.RulesProvider = RulesProvider;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var TextEditInfo = (function () {
function TextEditInfo(position, length, replaceWith) {
this.position = position;
this.length = length;
this.replaceWith = replaceWith;
}
TextEditInfo.prototype.toString = function () {
return "[ position: " + this.position + ", length: " + this.length + ", replaceWith: '" + this.replaceWith + "' ]";
};
return TextEditInfo;
})();
Formatting.TextEditInfo = TextEditInfo;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var Shared;
(function (Shared) {
var TokenRangeAccess = (function () {
function TokenRangeAccess(from, to, except) {
this.tokens = [];
for (var token = from; token <= to; token++) {
if (except.indexOf(token) < 0) {
this.tokens.push(token);
}
}
}
TokenRangeAccess.prototype.GetTokens = function () {
return this.tokens;
};
TokenRangeAccess.prototype.Contains = function (token) {
return this.tokens.indexOf(token) >= 0;
};
TokenRangeAccess.prototype.toString = function () {
return "[tokenRangeStart=" + TypeScript.SyntaxKind[this.tokens[0]] + "," + "tokenRangeEnd=" + TypeScript.SyntaxKind[this.tokens[this.tokens.length - 1]] + "]";
};
return TokenRangeAccess;
})();
Shared.TokenRangeAccess = TokenRangeAccess;
var TokenValuesAccess = (function () {
function TokenValuesAccess(tks) {
this.tokens = tks && tks.length ? tks : [];
}
TokenValuesAccess.prototype.GetTokens = function () {
return this.tokens;
};
TokenValuesAccess.prototype.Contains = function (token) {
return this.tokens.indexOf(token) >= 0;
};
return TokenValuesAccess;
})();
Shared.TokenValuesAccess = TokenValuesAccess;
var TokenSingleValueAccess = (function () {
function TokenSingleValueAccess(token) {
this.token = token;
}
TokenSingleValueAccess.prototype.GetTokens = function () {
return [this.token];
};
TokenSingleValueAccess.prototype.Contains = function (tokenValue) {
return tokenValue == this.token;
};
TokenSingleValueAccess.prototype.toString = function () {
return "[singleTokenKind=" + TypeScript.SyntaxKind[this.token] + "]";
};
return TokenSingleValueAccess;
})();
Shared.TokenSingleValueAccess = TokenSingleValueAccess;
var TokenAllAccess = (function () {
function TokenAllAccess() {
}
TokenAllAccess.prototype.GetTokens = function () {
var result = [];
for (var token = TypeScript.SyntaxKind.FirstToken; token <= TypeScript.SyntaxKind.LastToken; token++) {
result.push(token);
}
return result;
};
TokenAllAccess.prototype.Contains = function (tokenValue) {
return true;
};
TokenAllAccess.prototype.toString = function () {
return "[allTokens]";
};
return TokenAllAccess;
})();
Shared.TokenAllAccess = TokenAllAccess;
var TokenRange = (function () {
function TokenRange(tokenAccess) {
this.tokenAccess = tokenAccess;
}
TokenRange.FromToken = function (token) {
return new TokenRange(new TokenSingleValueAccess(token));
};
TokenRange.FromTokens = function (tokens) {
return new TokenRange(new TokenValuesAccess(tokens));
};
TokenRange.FromRange = function (f, to, except) {
if (except === void 0) { except = []; }
return new TokenRange(new TokenRangeAccess(f, to, except));
};
TokenRange.AllTokens = function () {
return new TokenRange(new TokenAllAccess());
};
TokenRange.prototype.GetTokens = function () {
return this.tokenAccess.GetTokens();
};
TokenRange.prototype.Contains = function (token) {
return this.tokenAccess.Contains(token);
};
TokenRange.prototype.toString = function () {
return this.tokenAccess.toString();
};
TokenRange.Any = TokenRange.AllTokens();
TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([4 /* MultiLineCommentTrivia */]));
TokenRange.Keywords = TokenRange.FromRange(TypeScript.SyntaxKind.FirstKeyword, TypeScript.SyntaxKind.LastKeyword);
TokenRange.Operators = TokenRange.FromRange(80 /* SemicolonToken */, 121 /* SlashEqualsToken */);
TokenRange.BinaryOperators = TokenRange.FromRange(82 /* LessThanToken */, 121 /* SlashEqualsToken */);
TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([31 /* InKeyword */, 32 /* InstanceOfKeyword */]);
TokenRange.ReservedKeywords = TokenRange.FromRange(TypeScript.SyntaxKind.FirstFutureReservedStrictKeyword, TypeScript.SyntaxKind.LastFutureReservedStrictKeyword);
TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([95 /* PlusPlusToken */, 96 /* MinusMinusToken */, 104 /* TildeToken */, 103 /* ExclamationToken */]);
TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([11 /* NumericLiteral */, 9 /* IdentifierName */, 74 /* OpenParenToken */, 76 /* OpenBracketToken */, 72 /* OpenBraceToken */, 37 /* ThisKeyword */, 33 /* NewKeyword */]);
TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([9 /* IdentifierName */, 74 /* OpenParenToken */, 37 /* ThisKeyword */, 33 /* NewKeyword */]);
TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([9 /* IdentifierName */, 75 /* CloseParenToken */, 77 /* CloseBracketToken */, 33 /* NewKeyword */]);
TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([9 /* IdentifierName */, 74 /* OpenParenToken */, 37 /* ThisKeyword */, 33 /* NewKeyword */]);
TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([9 /* IdentifierName */, 75 /* CloseParenToken */, 77 /* CloseBracketToken */, 33 /* NewKeyword */]);
TokenRange.Comments = TokenRange.FromTokens([5 /* SingleLineCommentTrivia */, 4 /* MultiLineCommentTrivia */]);
TokenRange.TypeNames = TokenRange.FromTokens([9 /* IdentifierName */, 69 /* NumberKeyword */, 71 /* StringKeyword */, 63 /* BooleanKeyword */, 43 /* VoidKeyword */, 62 /* AnyKeyword */]);
return TokenRange;
})();
Shared.TokenRange = TokenRange;
})(Shared = Formatting.Shared || (Formatting.Shared = {}));
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var TokenSpan = (function (_super) {
__extends(TokenSpan, _super);
function TokenSpan(kind, start, length) {
_super.call(this, start, length);
this.kind = kind;
}
return TokenSpan;
})(TypeScript.TextSpan);
Formatting.TokenSpan = TokenSpan;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var IndentationNodeContext = (function () {
function IndentationNodeContext(parent, node, fullStart, indentationAmount, childIndentationAmountDelta) {
this.update(parent, node, fullStart, indentationAmount, childIndentationAmountDelta);
}
IndentationNodeContext.prototype.parent = function () {
return this._parent;
};
IndentationNodeContext.prototype.node = function () {
return this._node;
};
IndentationNodeContext.prototype.fullStart = function () {
return this._fullStart;
};
IndentationNodeContext.prototype.fullWidth = function () {
return TypeScript.fullWidth(this._node);
};
IndentationNodeContext.prototype.start = function () {
return this._fullStart + TypeScript.leadingTriviaWidth(this._node);
};
IndentationNodeContext.prototype.end = function () {
return this._fullStart + TypeScript.leadingTriviaWidth(this._node) + TypeScript.width(this._node);
};
IndentationNodeContext.prototype.indentationAmount = function () {
return this._indentationAmount;
};
IndentationNodeContext.prototype.childIndentationAmountDelta = function () {
return this._childIndentationAmountDelta;
};
IndentationNodeContext.prototype.depth = function () {
return this._depth;
};
IndentationNodeContext.prototype.kind = function () {
return this._node.kind;
};
IndentationNodeContext.prototype.hasSkippedOrMissingTokenChild = function () {
if (this._hasSkippedOrMissingTokenChild === null) {
this._hasSkippedOrMissingTokenChild = TypeScript.Syntax.nodeHasSkippedOrMissingTokens(this._node);
}
return this._hasSkippedOrMissingTokenChild;
};
IndentationNodeContext.prototype.clone = function (pool) {
var parent = null;
if (this._parent) {
parent = this._parent.clone(pool);
}
return pool.getNode(parent, this._node, this._fullStart, this._indentationAmount, this._childIndentationAmountDelta);
};
IndentationNodeContext.prototype.update = function (parent, node, fullStart, indentationAmount, childIndentationAmountDelta) {
this._parent = parent;
this._node = node;
this._fullStart = fullStart;
this._indentationAmount = indentationAmount;
this._childIndentationAmountDelta = childIndentationAmountDelta;
this._hasSkippedOrMissingTokenChild = null;
if (parent) {
this._depth = parent.depth() + 1;
}
else {
this._depth = 0;
}
};
return IndentationNodeContext;
})();
Formatting.IndentationNodeContext = IndentationNodeContext;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var IndentationNodeContextPool = (function () {
function IndentationNodeContextPool() {
this.nodes = [];
}
IndentationNodeContextPool.prototype.getNode = function (parent, node, fullStart, indentationLevel, childIndentationLevelDelta) {
if (this.nodes.length > 0) {
var cachedNode = this.nodes.pop();
cachedNode.update(parent, node, fullStart, indentationLevel, childIndentationLevelDelta);
return cachedNode;
}
return new Formatting.IndentationNodeContext(parent, node, fullStart, indentationLevel, childIndentationLevelDelta);
};
IndentationNodeContextPool.prototype.releaseNode = function (node, recursive) {
if (recursive === void 0) { recursive = false; }
this.nodes.push(node);
if (recursive) {
var parent = node.parent();
if (parent) {
this.releaseNode(parent, recursive);
}
}
};
return IndentationNodeContextPool;
})();
Formatting.IndentationNodeContextPool = IndentationNodeContextPool;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var IndentationTrackingWalker = (function () {
function IndentationTrackingWalker(textSpan, sourceUnit, snapshot, indentFirstToken, options) {
this.options = options;
this._position = 0;
this._parent = null;
this._indentationNodeContextPool = new Formatting.IndentationNodeContextPool();
this._textSpan = textSpan;
this._text = sourceUnit.syntaxTree.text;
this._snapshot = snapshot;
this._parent = this._indentationNodeContextPool.getNode(null, sourceUnit, 0, 0, 0);
this._lastTriviaWasNewLine = indentFirstToken;
}
IndentationTrackingWalker.prototype.position = function () {
return this._position;
};
IndentationTrackingWalker.prototype.parent = function () {
return this._parent;
};
IndentationTrackingWalker.prototype.textSpan = function () {
return this._textSpan;
};
IndentationTrackingWalker.prototype.snapshot = function () {
return this._snapshot;
};
IndentationTrackingWalker.prototype.indentationNodeContextPool = function () {
return this._indentationNodeContextPool;
};
IndentationTrackingWalker.prototype.forceIndentNextToken = function (tokenStart) {
this._lastTriviaWasNewLine = true;
this.forceRecomputeIndentationOfParent(tokenStart, true);
};
IndentationTrackingWalker.prototype.forceSkipIndentingNextToken = function (tokenStart) {
this._lastTriviaWasNewLine = false;
this.forceRecomputeIndentationOfParent(tokenStart, false);
};
IndentationTrackingWalker.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) {
throw TypeScript.Errors.abstract();
};
IndentationTrackingWalker.prototype.visitTokenInSpan = function (token) {
if (this._lastTriviaWasNewLine) {
var indentationAmount = this.getTokenIndentationAmount(token);
var commentIndentationAmount = this.getCommentIndentationAmount(token);
this.indentToken(token, indentationAmount, commentIndentationAmount);
}
};
IndentationTrackingWalker.prototype.visitToken = function (token) {
var tokenSpan = new TypeScript.TextSpan(this._position, token.fullWidth());
if (tokenSpan.intersectsWithTextSpan(this._textSpan)) {
this.visitTokenInSpan(token);
var _nextToken = TypeScript.nextToken(token);
if (_nextToken && _nextToken.hasLeadingTrivia()) {
var trivia = _nextToken.leadingTrivia();
this._lastTriviaWasNewLine = trivia.hasNewLine();
}
else {
this._lastTriviaWasNewLine = false;
}
}
this._position += token.fullWidth();
};
IndentationTrackingWalker.prototype.walk = function (element) {
if (element) {
if (TypeScript.isToken(element)) {
this.visitToken(element);
}
else if (element.kind === 1 /* List */) {
for (var i = 0, n = TypeScript.childCount(element); i < n; i++) {
this.walk(TypeScript.childAt(element, i));
}
}
else {
this.visitNode(element);
}
}
};
IndentationTrackingWalker.prototype.visitNode = function (node) {
var nodeSpan = new TypeScript.TextSpan(this._position, TypeScript.fullWidth(node));
if (nodeSpan.intersectsWithTextSpan(this._textSpan)) {
var indentation = this.getNodeIndentation(node);
var currentParent = this._parent;
this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta);
for (var i = 0, n = TypeScript.childCount(node); i < n; i++) {
this.walk(TypeScript.childAt(node, i));
}
this._indentationNodeContextPool.releaseNode(this._parent);
this._parent = currentParent;
}
else {
this._position += TypeScript.fullWidth(node);
}
};
IndentationTrackingWalker.prototype.getTokenIndentationAmount = function (token) {
if (TypeScript.firstToken(this._parent.node()) === token || token.kind === 72 /* OpenBraceToken */ || token.kind === 73 /* CloseBraceToken */ || token.kind === 76 /* OpenBracketToken */ || token.kind === 77 /* CloseBracketToken */ || (token.kind === 44 /* WhileKeyword */ && this._parent.node().kind == 166 /* DoStatement */)) {
return this._parent.indentationAmount();
}
return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta());
};
IndentationTrackingWalker.prototype.getCommentIndentationAmount = function (token) {
if (token.kind === 73 /* CloseBraceToken */ || token.kind === 77 /* CloseBracketToken */) {
return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta());
}
return this._parent.indentationAmount();
};
IndentationTrackingWalker.prototype.getNodeIndentation = function (node, newLineInsertedByFormatting) {
var parent = this._parent;
var parentIndentationAmount;
if (this._textSpan.containsPosition(parent.start())) {
parentIndentationAmount = parent.indentationAmount();
}
else {
if (parent.kind() === 151 /* Block */ && !this.shouldIndentBlockInParent(this._parent.parent())) {
parent = this._parent.parent();
}
var line = this._snapshot.getLineFromPosition(parent.start()).getText();
var firstNonWhiteSpacePosition = TypeScript.Indentation.firstNonWhitespacePosition(line);
parentIndentationAmount = TypeScript.Indentation.columnForPositionInString(line, firstNonWhiteSpacePosition, this.options);
}
var parentIndentationAmountDelta = parent.childIndentationAmountDelta();
var indentationAmount;
var indentationAmountDelta;
var parentNode = parent.node();
switch (node.kind) {
default:
indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta);
indentationAmountDelta = 0;
break;
case 136 /* ClassDeclaration */:
case 135 /* ModuleDeclaration */:
case 124 /* ObjectType */:
case 137 /* EnumDeclaration */:
case 156 /* SwitchStatement */:
case 179 /* ObjectLiteralExpression */:
case 142 /* ConstructorDeclaration */:
case 134 /* FunctionDeclaration */:
case 186 /* FunctionExpression */:
case 140 /* MemberFunctionDeclaration */:
case 144 /* GetAccessor */:
case 145 /* SetAccessor */:
case 143 /* IndexMemberDeclaration */:
case 201 /* CatchClause */:
case 178 /* ArrayLiteralExpression */:
case 126 /* ArrayType */:
case 185 /* ElementAccessExpression */:
case 149 /* IndexSignature */:
case 159 /* ForStatement */:
case 160 /* ForInStatement */:
case 163 /* WhileStatement */:
case 166 /* DoStatement */:
case 168 /* WithStatement */:
case 198 /* CaseSwitchClause */:
case 199 /* DefaultSwitchClause */:
case 155 /* ReturnStatement */:
case 162 /* ThrowStatement */:
case 183 /* SimpleArrowFunctionExpression */:
case 182 /* ParenthesizedArrowFunctionExpression */:
case 190 /* VariableDeclaration */:
case 139 /* ExportAssignment */:
case 177 /* InvocationExpression */:
case 180 /* ObjectCreationExpression */:
case 147 /* CallSignature */:
case 148 /* ConstructSignature */:
indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta);
indentationAmountDelta = this.options.indentSpaces;
break;
case 152 /* IfStatement */:
if (parent.kind() === 200 /* ElseClause */ && !TypeScript.SyntaxUtilities.isLastTokenOnLine(parentNode.elseKeyword, this._text)) {
indentationAmount = parentIndentationAmount;
}
else {
indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta);
}
indentationAmountDelta = this.options.indentSpaces;
break;
case 200 /* ElseClause */:
indentationAmount = parentIndentationAmount;
indentationAmountDelta = this.options.indentSpaces;
break;
case 151 /* Block */:
if (this.shouldIndentBlockInParent(parent)) {
indentationAmount = parentIndentationAmount + parentIndentationAmountDelta;
}
else {
indentationAmount = parentIndentationAmount;
}
indentationAmountDelta = this.options.indentSpaces;
break;
}
if (parentNode) {
if (!newLineInsertedByFormatting) {
var parentStartLine = this._snapshot.getLineNumberFromPosition(parent.start());
var currentNodeStartLine = this._snapshot.getLineNumberFromPosition(this._position + TypeScript.leadingTriviaWidth(node));
if (parentStartLine === currentNodeStartLine || newLineInsertedByFormatting === false) {
indentationAmount = parentIndentationAmount;
indentationAmountDelta = Math.min(this.options.indentSpaces, parentIndentationAmountDelta + indentationAmountDelta);
}
}
}
return {
indentationAmount: indentationAmount,
indentationAmountDelta: indentationAmountDelta
};
};
IndentationTrackingWalker.prototype.shouldIndentBlockInParent = function (parent) {
switch (parent.kind()) {
case 122 /* SourceUnit */:
case 135 /* ModuleDeclaration */:
case 151 /* Block */:
case 198 /* CaseSwitchClause */:
case 199 /* DefaultSwitchClause */:
return true;
default:
return false;
}
};
IndentationTrackingWalker.prototype.forceRecomputeIndentationOfParent = function (tokenStart, newLineAdded) {
var parent = this._parent;
if (TypeScript.start(parent.node()) === tokenStart) {
this._parent = parent.parent();
var indentation = this.getNodeIndentation(parent.node(), newLineAdded);
parent.update(parent.parent(), parent.node(), parent.fullStart(), indentation.indentationAmount, indentation.indentationAmountDelta);
this._parent = parent;
}
};
return IndentationTrackingWalker;
})();
Formatting.IndentationTrackingWalker = IndentationTrackingWalker;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var MultipleTokenIndenter = (function (_super) {
__extends(MultipleTokenIndenter, _super);
function MultipleTokenIndenter(textSpan, sourceUnit, snapshot, indentFirstToken, options) {
_super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options);
this._edits = [];
}
MultipleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) {
if (token.fullWidth() === 0) {
return;
}
if (this.parent().hasSkippedOrMissingTokenChild()) {
return;
}
var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), TypeScript.width(token));
if (!this.textSpan().containsTextSpan(tokenSpan)) {
return;
}
var indentationString = TypeScript.Indentation.indentationString(indentationAmount, this.options);
var commentIndentationString = TypeScript.Indentation.indentationString(commentIndentationAmount, this.options);
this.recordIndentationEditsForToken(token, indentationString, commentIndentationString);
};
MultipleTokenIndenter.prototype.edits = function () {
return this._edits;
};
MultipleTokenIndenter.prototype.recordEdit = function (position, length, replaceWith) {
this._edits.push(new Formatting.TextEditInfo(position, length, replaceWith));
};
MultipleTokenIndenter.prototype.recordIndentationEditsForToken = function (token, indentationString, commentIndentationString) {
var position = this.position();
var indentNextTokenOrTrivia = true;
var leadingWhiteSpace = "";
var triviaList = token.leadingTrivia();
if (triviaList) {
var seenNewLine = position === 0;
for (var i = 0, length = triviaList.count(); i < length; i++, position += trivia.fullWidth()) {
var trivia = triviaList.syntaxTriviaAt(i);
if (!seenNewLine) {
if (trivia.kind !== 3 /* NewLineTrivia */) {
continue;
}
else {
seenNewLine = true;
continue;
}
}
if (!this.textSpan().containsTextSpan(new TypeScript.TextSpan(position, trivia.fullWidth()))) {
continue;
}
switch (trivia.kind) {
case 4 /* MultiLineCommentTrivia */:
this.recordIndentationEditsForMultiLineComment(trivia, position, commentIndentationString, leadingWhiteSpace, !indentNextTokenOrTrivia);
indentNextTokenOrTrivia = false;
leadingWhiteSpace = "";
break;
case 5 /* SingleLineCommentTrivia */:
case 6 /* SkippedTokenTrivia */:
if (indentNextTokenOrTrivia) {
this.recordIndentationEditsForSingleLineOrSkippedText(trivia, position, commentIndentationString);
indentNextTokenOrTrivia = false;
}
break;
case 2 /* WhitespaceTrivia */:
var nextTrivia = length > i + 1 && triviaList.syntaxTriviaAt(i + 1);
var whiteSpaceIndentationString = nextTrivia && nextTrivia.isComment() ? commentIndentationString : indentationString;
if (indentNextTokenOrTrivia) {
if (!(nextTrivia && nextTrivia.isNewLine())) {
this.recordIndentationEditsForWhitespace(trivia, position, whiteSpaceIndentationString);
}
indentNextTokenOrTrivia = false;
}
leadingWhiteSpace += trivia.fullText();
break;
case 3 /* NewLineTrivia */:
indentNextTokenOrTrivia = true;
leadingWhiteSpace = "";
break;
default:
throw TypeScript.Errors.invalidOperation();
}
}
}
if (token.kind !== 8 /* EndOfFileToken */ && indentNextTokenOrTrivia) {
if (indentationString.length > 0) {
this.recordEdit(position, 0, indentationString);
}
}
};
MultipleTokenIndenter.prototype.recordIndentationEditsForSingleLineOrSkippedText = function (trivia, fullStart, indentationString) {
if (indentationString.length > 0) {
this.recordEdit(fullStart, 0, indentationString);
}
};
MultipleTokenIndenter.prototype.recordIndentationEditsForWhitespace = function (trivia, fullStart, indentationString) {
var text = trivia.fullText();
if (indentationString === text) {
return;
}
this.recordEdit(fullStart, text.length, indentationString);
};
MultipleTokenIndenter.prototype.recordIndentationEditsForMultiLineComment = function (trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented) {
var position = fullStart;
var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia);
if (segments.length <= 1) {
if (!firstLineAlreadyIndented) {
this.recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString);
}
return;
}
var whiteSpaceColumnsInFirstSegment = TypeScript.Indentation.columnForPositionInString(leadingWhiteSpace, leadingWhiteSpace.length, this.options);
var indentationColumns = TypeScript.Indentation.columnForPositionInString(indentationString, indentationString.length, this.options);
var startIndex = 0;
if (firstLineAlreadyIndented) {
startIndex = 1;
position += segments[0].length;
}
for (var i = startIndex; i < segments.length; i++) {
var segment = segments[i];
this.recordIndentationEditsForSegment(segment, position, indentationColumns, whiteSpaceColumnsInFirstSegment);
position += segment.length;
}
};
MultipleTokenIndenter.prototype.recordIndentationEditsForSegment = function (segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment) {
var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment);
var leadingWhiteSpaceColumns = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options);
var deltaFromFirstSegment = leadingWhiteSpaceColumns - whiteSpaceColumnsInFirstSegment;
var finalColumns = indentationColumns + deltaFromFirstSegment;
if (finalColumns < 0) {
finalColumns = 0;
}
var indentationString = TypeScript.Indentation.indentationString(finalColumns, this.options);
if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) {
return;
}
if (indentationString === segment.substring(0, firstNonWhitespacePosition)) {
return;
}
this.recordEdit(fullStart, firstNonWhitespacePosition, indentationString);
};
return MultipleTokenIndenter;
})(Formatting.IndentationTrackingWalker);
Formatting.MultipleTokenIndenter = MultipleTokenIndenter;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
var Formatting;
(function (Formatting) {
var Formatter = (function (_super) {
__extends(Formatter, _super);
function Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind) {
_super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options);
this.previousTokenSpan = null;
this.previousTokenParent = null;
this.scriptHasErrors = false;
this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool());
this.rulesProvider = rulesProvider;
this.formattingRequestKind = formattingRequestKind;
this.formattingContext = new Formatting.FormattingContext(this.snapshot(), this.formattingRequestKind);
}
Formatter.getEdits = function (textSpan, sourceUnit, options, indentFirstToken, snapshot, rulesProvider, formattingRequestKind) {
var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind);
walker.walk(sourceUnit);
return walker.edits();
};
Formatter.prototype.visitTokenInSpan = function (token) {
if (token.fullWidth() !== 0) {
var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), TypeScript.width(token));
if (this.textSpan().containsTextSpan(tokenSpan)) {
this.processToken(token);
}
}
_super.prototype.visitTokenInSpan.call(this, token);
};
Formatter.prototype.processToken = function (token) {
var position = this.position();
if (token.leadingTriviaWidth() !== 0) {
this.processTrivia(token.leadingTrivia(), position);
position += token.leadingTriviaWidth();
}
var currentTokenSpan = new Formatting.TokenSpan(token.kind, position, TypeScript.width(token));
if (!this.parent().hasSkippedOrMissingTokenChild()) {
if (this.previousTokenSpan) {
this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent());
}
else {
this.trimWhitespaceInLineRange(this.getLineNumber(this.textSpan()), this.getLineNumber(currentTokenSpan));
}
}
this.previousTokenSpan = currentTokenSpan;
if (this.previousTokenParent) {
this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true);
}
this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool());
position += TypeScript.width(token);
};
Formatter.prototype.processTrivia = function (triviaList, fullStart) {
var position = fullStart;
for (var i = 0, n = triviaList.count(); i < n; i++) {
var trivia = triviaList.syntaxTriviaAt(i);
if (trivia.isComment() || trivia.isSkippedToken()) {
var currentTokenSpan = new Formatting.TokenSpan(trivia.kind, position, trivia.fullWidth());
if (this.textSpan().containsTextSpan(currentTokenSpan)) {
if (trivia.isComment() && this.previousTokenSpan) {
this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent());
}
else {
var startLine = this.getLineNumber(this.previousTokenSpan || this.textSpan());
this.trimWhitespaceInLineRange(startLine, this.getLineNumber(currentTokenSpan));
}
this.previousTokenSpan = currentTokenSpan;
if (this.previousTokenParent) {
this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true);
}
this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool());
}
}
position += trivia.fullWidth();
}
};
Formatter.prototype.findCommonParents = function (parent1, parent2) {
var shallowParent;
var shallowParentDepth;
var deepParent;
var deepParentDepth;
if (parent1.depth() < parent2.depth()) {
shallowParent = parent1;
shallowParentDepth = parent1.depth();
deepParent = parent2;
deepParentDepth = parent2.depth();
}
else {
shallowParent = parent2;
shallowParentDepth = parent2.depth();
deepParent = parent1;
deepParentDepth = parent1.depth();
}
TypeScript.Debug.assert(shallowParentDepth >= 0, "Expected shallowParentDepth >= 0");
TypeScript.Debug.assert(deepParentDepth >= 0, "Expected deepParentDepth >= 0");
TypeScript.Debug.assert(deepParentDepth >= shallowParentDepth, "Expected deepParentDepth >= shallowParentDepth");
while (deepParentDepth > shallowParentDepth) {
deepParent = deepParent.parent();
deepParentDepth--;
}
TypeScript.Debug.assert(deepParentDepth === shallowParentDepth, "Expected deepParentDepth === shallowParentDepth");
while (deepParent.node() && shallowParent.node()) {
if (deepParent.node() === shallowParent.node()) {
return deepParent;
}
deepParent = deepParent.parent();
shallowParent = shallowParent.parent();
}
throw TypeScript.Errors.invalidOperation();
};
Formatter.prototype.formatPair = function (t1, t1Parent, t2, t2Parent) {
var token1Line = this.getLineNumber(t1);
var token2Line = this.getLineNumber(t2);
var commonParent = this.findCommonParents(t1Parent, t2Parent);
this.formattingContext.updateContext(t1, t1Parent, t2, t2Parent, commonParent);
var rule = this.rulesProvider.getRulesMap().GetRule(this.formattingContext);
if (rule != null) {
this.RecordRuleEdits(rule, t1, t2);
if ((rule.Operation.Action == 1 /* Space */ || rule.Operation.Action == 3 /* Delete */) && token1Line != token2Line) {
this.forceSkipIndentingNextToken(t2.start());
}
if (rule.Operation.Action == 2 /* NewLine */ && token1Line == token2Line) {
this.forceIndentNextToken(t2.start());
}
}
if (token1Line != token2Line && (!rule || (rule.Operation.Action != 3 /* Delete */ && rule.Flag != 1 /* CanDeleteNewLines */))) {
this.trimWhitespaceInLineRange(token1Line, token2Line, t1);
}
};
Formatter.prototype.getLineNumber = function (span) {
return this.snapshot().getLineNumberFromPosition(span.start());
};
Formatter.prototype.trimWhitespaceInLineRange = function (startLine, endLine, token) {
for (var lineNumber = startLine; lineNumber < endLine; ++lineNumber) {
var line = this.snapshot().getLineFromLineNumber(lineNumber);
this.trimWhitespace(line, token);
}
};
Formatter.prototype.trimWhitespace = function (line, token) {
if (token && (token.kind == 4 /* MultiLineCommentTrivia */ || token.kind == 5 /* SingleLineCommentTrivia */) && token.start() <= line.endPosition() && token.end() >= line.endPosition())
return;
var text = line.getText();
var index = 0;
for (index = text.length - 1; index >= 0; --index) {
if (!TypeScript.CharacterInfo.isWhitespace(text.charCodeAt(index))) {
break;
}
}
++index;
if (index < text.length) {
this.recordEdit(line.startPosition() + index, line.length() - index, "");
}
};
Formatter.prototype.RecordRuleEdits = function (rule, t1, t2) {
if (rule.Operation.Action == 0 /* Ignore */) {
return;
}
var betweenSpan;
switch (rule.Operation.Action) {
case 3 /* Delete */:
{
betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end());
if (betweenSpan.length() > 0) {
this.recordEdit(betweenSpan.start(), betweenSpan.length(), "");
return;
}
}
break;
case 2 /* NewLine */:
{
if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) {
return;
}
betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end());
var doEdit = false;
var betweenText = this.snapshot().getText(betweenSpan);
var lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter);
if (lineFeedLoc < 0) {
doEdit = true;
}
else {
lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter, lineFeedLoc + 1);
if (lineFeedLoc >= 0) {
doEdit = true;
}
}
if (doEdit) {
this.recordEdit(betweenSpan.start(), betweenSpan.length(), this.options.newLineCharacter);
return;
}
}
break;
case 1 /* Space */:
{
if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) {
return;
}
betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end());
if (betweenSpan.length() > 1 || this.snapshot().getText(betweenSpan) != " ") {
this.recordEdit(betweenSpan.start(), betweenSpan.length(), " ");
return;
}
}
break;
}
};
return Formatter;
})(Formatting.MultipleTokenIndenter);
Formatting.Formatter = Formatter;
})(Formatting = Services.Formatting || (Services.Formatting = {}));
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var SmartIndenter;
(function (SmartIndenter) {
function getIndentation(position, sourceFile, options) {
if (position > sourceFile.text.length) {
return 0;
}
var precedingToken = ts.findPrecedingToken(position, sourceFile);
if (!precedingToken) {
return 0;
}
if ((precedingToken.kind === 7 /* StringLiteral */ || precedingToken.kind === 8 /* RegularExpressionLiteral */) && precedingToken.getStart(sourceFile) <= position && precedingToken.end > position) {
return 0;
}
var lineAtPosition = sourceFile.getLineAndCharacterFromPosition(position).line;
if (precedingToken.kind === 22 /* CommaToken */ && precedingToken.parent.kind !== 153 /* BinaryExpression */) {
var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation;
}
}
var previous;
var current = precedingToken;
var currentStart;
var indentationDelta;
while (current) {
if (positionBelongsToNode(current, position, sourceFile) && nodeContentIsIndented(current, previous)) {
currentStart = getStartLineAndCharacterForNode(current, sourceFile);
if (nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile)) {
indentationDelta = 0;
}
else {
indentationDelta = lineAtPosition !== currentStart.line ? options.indentSpaces : 0;
}
break;
}
var actualIndentation = getActualIndentationForListItem(current, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation;
}
previous = current;
current = current.parent;
}
if (!current) {
return 0;
}
var parent = current.parent;
var parentStart;
while (parent) {
var actualIndentation = getActualIndentationForListItem(current, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation + indentationDelta;
}
parentStart = sourceFile.getLineAndCharacterFromPosition(parent.getStart(sourceFile));
var parentAndChildShareLine = parentStart.line === currentStart.line || childStartsOnTheSameLineWithElseInIfStatement(parent, current, currentStart.line, sourceFile);
var actualIndentation = getActualIndentationForNode(current, parent, currentStart, parentAndChildShareLine, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation + indentationDelta;
}
if (nodeContentIsIndented(parent, current) && !parentAndChildShareLine) {
indentationDelta += options.indentSpaces;
}
current = parent;
currentStart = parentStart;
parent = current.parent;
}
return indentationDelta;
}
SmartIndenter.getIndentation = getIndentation;
function getActualIndentationForListItemBeforeComma(commaToken, sourceFile, options) {
var commaItemInfo = ts.findListItemInfo(commaToken);
ts.Debug.assert(commaItemInfo && commaItemInfo.listItemIndex > 0);
return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options);
}
function getActualIndentationForNode(current, parent, currentLineAndChar, parentAndChildShareLine, sourceFile, options) {
var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && (parent.kind === 193 /* SourceFile */ || !parentAndChildShareLine);
if (!useActualIndentation) {
return -1;
}
return findColumnForFirstNonWhitespaceCharacterInLine(currentLineAndChar, sourceFile, options);
}
function nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile) {
var nextToken = ts.findNextToken(precedingToken, current);
if (!nextToken) {
return false;
}
if (nextToken.kind === 13 /* OpenBraceToken */) {
return true;
}
else if (nextToken.kind === 14 /* CloseBraceToken */) {
var nextTokenStartLine = getStartLineAndCharacterForNode(nextToken, sourceFile).line;
return lineAtPosition === nextTokenStartLine;
}
return false;
}
function getStartLineAndCharacterForNode(n, sourceFile) {
return sourceFile.getLineAndCharacterFromPosition(n.getStart(sourceFile));
}
function positionBelongsToNode(candidate, position, sourceFile) {
return candidate.end > position || !isCompletedNode(candidate, sourceFile);
}
function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) {
if (parent.kind === 162 /* IfStatement */ && parent.elseStatement === child) {
var elseKeyword = ts.findChildOfKind(parent, 74 /* ElseKeyword */, sourceFile);
ts.Debug.assert(elseKeyword !== undefined);
var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
return elseKeywordStartLine === childStartLine;
}
}
function getActualIndentationForListItem(node, sourceFile, options) {
if (node.parent) {
switch (node.parent.kind) {
case 132 /* TypeReference */:
if (node.parent.typeArguments) {
return getActualIndentationFromList(node.parent.typeArguments);
}
break;
case 140 /* ObjectLiteral */:
return getActualIndentationFromList(node.parent.properties);
case 134 /* TypeLiteral */:
return getActualIndentationFromList(node.parent.members);
case 139 /* ArrayLiteral */:
return getActualIndentationFromList(node.parent.elements);
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
case 125 /* Method */:
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
if (node.parent.typeParameters && node.end < node.parent.typeParameters.end) {
return getActualIndentationFromList(node.parent.typeParameters);
}
return getActualIndentationFromList(node.parent.parameters);
case 145 /* NewExpression */:
case 144 /* CallExpression */:
if (node.parent.typeArguments && node.end < node.parent.typeArguments.end) {
return getActualIndentationFromList(node.parent.typeArguments);
}
return getActualIndentationFromList(node.parent.arguments);
}
}
return -1;
function getActualIndentationFromList(list) {
var index = ts.indexOf(list, node);
return index !== -1 ? deriveActualIndentationFromList(list, index, sourceFile, options) : -1;
}
}
function deriveActualIndentationFromList(list, index, sourceFile, options) {
ts.Debug.assert(index >= 0 && index < list.length);
var node = list[index];
var lineAndCharacter = getStartLineAndCharacterForNode(node, sourceFile);
for (var i = index - 1; i >= 0; --i) {
if (list[i].kind === 22 /* CommaToken */) {
continue;
}
var prevEndLine = sourceFile.getLineAndCharacterFromPosition(list[i].end).line;
if (prevEndLine !== lineAndCharacter.line) {
return findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options);
}
lineAndCharacter = getStartLineAndCharacterForNode(list[i], sourceFile);
}
return -1;
}
function findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options) {
var lineStart = sourceFile.getPositionFromLineAndCharacter(lineAndCharacter.line, 1);
var column = 0;
for (var i = 0; i < lineAndCharacter.character; ++i) {
var charCode = sourceFile.text.charCodeAt(lineStart + i);
if (!ts.isWhiteSpace(charCode)) {
return column;
}
if (charCode === 9 /* tab */) {
column += options.spacesPerTab;
}
else {
column++;
}
}
return column;
}
function nodeContentIsIndented(parent, child) {
switch (parent.kind) {
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
return true;
case 188 /* ModuleDeclaration */:
return false;
case 182 /* FunctionDeclaration */:
case 125 /* Method */:
case 149 /* FunctionExpression */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 126 /* Constructor */:
return false;
case 163 /* DoStatement */:
case 164 /* WhileStatement */:
case 166 /* ForInStatement */:
case 165 /* ForStatement */:
return child && child.kind !== 158 /* Block */;
case 162 /* IfStatement */:
return child && child.kind !== 158 /* Block */;
case 176 /* TryStatement */:
return false;
case 139 /* ArrayLiteral */:
case 158 /* Block */:
case 183 /* FunctionBlock */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
case 189 /* ModuleBlock */:
case 140 /* ObjectLiteral */:
case 134 /* TypeLiteral */:
case 171 /* SwitchStatement */:
case 173 /* DefaultClause */:
case 172 /* CaseClause */:
case 148 /* ParenExpression */:
case 144 /* CallExpression */:
case 145 /* NewExpression */:
case 159 /* VariableStatement */:
case 181 /* VariableDeclaration */:
return true;
default:
return false;
}
}
function nodeEndsWith(n, expectedLastToken, sourceFile) {
var children = n.getChildren(sourceFile);
if (children.length) {
var last = children[children.length - 1];
if (last.kind === expectedLastToken) {
return true;
}
else if (last.kind === 21 /* SemicolonToken */ && children.length !== 1) {
return children[children.length - 2].kind === expectedLastToken;
}
}
return false;
}
function isCompletedNode(n, sourceFile) {
switch (n.kind) {
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
case 140 /* ObjectLiteral */:
case 158 /* Block */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
case 183 /* FunctionBlock */:
case 189 /* ModuleBlock */:
case 171 /* SwitchStatement */:
return nodeEndsWith(n, 14 /* CloseBraceToken */, sourceFile);
case 148 /* ParenExpression */:
case 129 /* CallSignature */:
case 144 /* CallExpression */:
case 130 /* ConstructSignature */:
return nodeEndsWith(n, 16 /* CloseParenToken */, sourceFile);
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 125 /* Method */:
case 150 /* ArrowFunction */:
return !n.body || isCompletedNode(n.body, sourceFile);
case 188 /* ModuleDeclaration */:
return n.body && isCompletedNode(n.body, sourceFile);
case 162 /* IfStatement */:
if (n.elseStatement) {
return isCompletedNode(n.elseStatement, sourceFile);
}
return isCompletedNode(n.thenStatement, sourceFile);
case 161 /* ExpressionStatement */:
return isCompletedNode(n.expression, sourceFile);
case 139 /* ArrayLiteral */:
return nodeEndsWith(n, 18 /* CloseBracketToken */, sourceFile);
case 120 /* Missing */:
return false;
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
return false;
case 164 /* WhileStatement */:
return isCompletedNode(n.statement, sourceFile);
case 163 /* DoStatement */:
var hasWhileKeyword = ts.findChildOfKind(n, 98 /* WhileKeyword */, sourceFile);
if (hasWhileKeyword) {
return nodeEndsWith(n, 16 /* CloseParenToken */, sourceFile);
}
return isCompletedNode(n.statement, sourceFile);
default:
return true;
}
}
})(SmartIndenter = formatting.SmartIndenter || (formatting.SmartIndenter = {}));
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var TypeScript;
(function (TypeScript) {
var NullLogger = (function () {
function NullLogger() {
}
NullLogger.prototype.log = function (s) {
};
return NullLogger;
})();
TypeScript.NullLogger = NullLogger;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
var proto = "__proto__";
var BlockIntrinsics = (function () {
function BlockIntrinsics() {
this.prototype = undefined;
this.toString = undefined;
this.toLocaleString = undefined;
this.valueOf = undefined;
this.hasOwnProperty = undefined;
this.propertyIsEnumerable = undefined;
this.isPrototypeOf = undefined;
this["constructor"] = undefined;
this[proto] = null;
this[proto] = undefined;
}
return BlockIntrinsics;
})();
function createIntrinsicsObject() {
return new BlockIntrinsics();
}
TypeScript.createIntrinsicsObject = createIntrinsicsObject;
})(TypeScript || (TypeScript = {}));
var TypeScript;
(function (TypeScript) {
function isFileOfExtension(fname, ext) {
var invariantFname = fname.toLocaleUpperCase();
var invariantExt = ext.toLocaleUpperCase();
var extLength = invariantExt.length;
return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt;
}
function isDTSFile(fname) {
return isFileOfExtension(fname, ".d.ts");
}
TypeScript.isDTSFile = isDTSFile;
})(TypeScript || (TypeScript = {}));
var ts;
(function (ts) {
var scanner = ts.createScanner(2 /* Latest */, true);
var emptyArray = [];
function createNode(kind, pos, end, flags, parent) {
var node = new (ts.getNodeConstructor(kind))();
node.pos = pos;
node.end = end;
node.flags = flags;
node.parent = parent;
return node;
}
var NodeObject = (function () {
function NodeObject() {
}
NodeObject.prototype.getSourceFile = function () {
return ts.getSourceFileOfNode(this);
};
NodeObject.prototype.getStart = function (sourceFile) {
return ts.getTokenPosOfNode(this, sourceFile);
};
NodeObject.prototype.getFullStart = function () {
return this.pos;
};
NodeObject.prototype.getEnd = function () {
return this.end;
};
NodeObject.prototype.getWidth = function (sourceFile) {
return this.getEnd() - this.getStart(sourceFile);
};
NodeObject.prototype.getFullWidth = function () {
return this.end - this.getFullStart();
};
NodeObject.prototype.getLeadingTriviaWidth = function (sourceFile) {
return this.getStart(sourceFile) - this.pos;
};
NodeObject.prototype.getFullText = function (sourceFile) {
return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end);
};
NodeObject.prototype.getText = function (sourceFile) {
return (sourceFile || this.getSourceFile()).text.substring(this.getStart(), this.getEnd());
};
NodeObject.prototype.addSyntheticNodes = function (nodes, pos, end) {
scanner.setTextPos(pos);
while (pos < end) {
var token = scanner.scan();
var textPos = scanner.getTextPos();
nodes.push(createNode(token, pos, textPos, 512 /* Synthetic */, this));
pos = textPos;
}
return pos;
};
NodeObject.prototype.createSyntaxList = function (nodes) {
var list = createNode(195 /* SyntaxList */, nodes.pos, nodes.end, 512 /* Synthetic */, this);
list._children = [];
var pos = nodes.pos;
for (var i = 0, len = nodes.length; i < len; i++) {
var node = nodes[i];
if (pos < node.pos) {
pos = this.addSyntheticNodes(list._children, pos, node.pos);
}
list._children.push(node);
pos = node.end;
}
if (pos < nodes.end) {
this.addSyntheticNodes(list._children, pos, nodes.end);
}
return list;
};
NodeObject.prototype.createChildren = function (sourceFile) {
var _this = this;
if (this.kind > 120 /* Missing */) {
scanner.setText((sourceFile || this.getSourceFile()).text);
var children = [];
var pos = this.pos;
var processNode = function (node) {
if (pos < node.pos) {
pos = _this.addSyntheticNodes(children, pos, node.pos);
}
children.push(node);
pos = node.end;
};
var processNodes = function (nodes) {
if (pos < nodes.pos) {
pos = _this.addSyntheticNodes(children, pos, nodes.pos);
}
children.push(_this.createSyntaxList(nodes));
pos = nodes.end;
};
ts.forEachChild(this, processNode, processNodes);
if (pos < this.end) {
this.addSyntheticNodes(children, pos, this.end);
}
scanner.setText(undefined);
}
this._children = children || emptyArray;
};
NodeObject.prototype.getChildCount = function (sourceFile) {
if (!this._children)
this.createChildren(sourceFile);
return this._children.length;
};
NodeObject.prototype.getChildAt = function (index, sourceFile) {
if (!this._children)
this.createChildren(sourceFile);
return this._children[index];
};
NodeObject.prototype.getChildren = function (sourceFile) {
if (!this._children)
this.createChildren(sourceFile);
return this._children;
};
NodeObject.prototype.getFirstToken = function (sourceFile) {
var children = this.getChildren();
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.kind < 120 /* Missing */)
return child;
if (child.kind > 120 /* Missing */)
return child.getFirstToken(sourceFile);
}
};
NodeObject.prototype.getLastToken = function (sourceFile) {
var children = this.getChildren(sourceFile);
for (var i = children.length - 1; i >= 0; i--) {
var child = children[i];
if (child.kind < 120 /* Missing */)
return child;
if (child.kind > 120 /* Missing */)
return child.getLastToken(sourceFile);
}
};
return NodeObject;
})();
var SymbolObject = (function () {
function SymbolObject(flags, name) {
this.flags = flags;
this.name = name;
}
SymbolObject.prototype.getFlags = function () {
return this.flags;
};
SymbolObject.prototype.getName = function () {
return this.name;
};
SymbolObject.prototype.getDeclarations = function () {
return this.declarations;
};
SymbolObject.prototype.getDocumentationComment = function () {
if (this.documentationComment === undefined) {
this.documentationComment = getJsDocCommentsFromDeclarations(this.declarations, this.name, !(this.flags & 4 /* Property */));
}
return this.documentationComment;
};
return SymbolObject;
})();
function getJsDocCommentsFromDeclarations(declarations, name, canUseParsedParamTagComments) {
var documentationComment = [];
var docComments = getJsDocCommentsSeparatedByNewLines();
ts.forEach(docComments, function (docComment) {
if (documentationComment.length) {
documentationComment.push(lineBreakPart());
}
documentationComment.push(docComment);
});
return documentationComment;
function getJsDocCommentsSeparatedByNewLines() {
var paramTag = "@param";
var jsDocCommentParts = [];
ts.forEach(declarations, function (declaration) {
var sourceFileOfDeclaration = ts.getSourceFileOfNode(declaration);
if (canUseParsedParamTagComments && declaration.kind === 123 /* Parameter */) {
ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration), function (jsDocCommentTextRange) {
var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration);
if (cleanedParamJsDocComment) {
jsDocCommentParts.push.apply(jsDocCommentParts, cleanedParamJsDocComment);
}
});
}
if (declaration.kind === 188 /* ModuleDeclaration */ && declaration.body.kind === 188 /* ModuleDeclaration */) {
return;
}
while (declaration.kind === 188 /* ModuleDeclaration */ && declaration.parent.kind === 188 /* ModuleDeclaration */) {
declaration = declaration.parent;
}
ts.forEach(getJsDocCommentTextRange(declaration.kind === 181 /* VariableDeclaration */ ? declaration.parent : declaration, sourceFileOfDeclaration), function (jsDocCommentTextRange) {
var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration);
if (cleanedJsDocComment) {
jsDocCommentParts.push.apply(jsDocCommentParts, cleanedJsDocComment);
}
});
});
return jsDocCommentParts;
function getJsDocCommentTextRange(node, sourceFile) {
return ts.map(ts.getJsDocComments(node, sourceFile), function (jsDocComment) {
return {
pos: jsDocComment.pos + "/*".length,
end: jsDocComment.end - "*/".length
};
});
}
function consumeWhiteSpacesOnTheLine(pos, end, sourceFile, maxSpacesToRemove) {
if (maxSpacesToRemove !== undefined) {
end = Math.min(end, pos + maxSpacesToRemove);
}
for (; pos < end; pos++) {
var ch = sourceFile.text.charCodeAt(pos);
if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) {
return pos;
}
}
return end;
}
function consumeLineBreaks(pos, end, sourceFile) {
while (pos < end && ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
pos++;
}
return pos;
}
function isName(pos, end, sourceFile, name) {
return pos + name.length < end && sourceFile.text.substr(pos, name.length) === name && (ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)) || ts.isLineBreak(sourceFile.text.charCodeAt(pos + name.length)));
}
function isParamTag(pos, end, sourceFile) {
return isName(pos, end, sourceFile, paramTag);
}
function pushDocCommentLineText(docComments, text, blankLineCount) {
while (blankLineCount--)
docComments.push(textPart(""));
docComments.push(textPart(text));
}
function getCleanedJsDocComment(pos, end, sourceFile) {
var spacesToRemoveAfterAsterisk;
var docComments = [];
var blankLineCount = 0;
var isInParamTag = false;
while (pos < end) {
var docCommentTextOfLine = "";
pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile);
if (pos < end && sourceFile.text.charCodeAt(pos) === 42 /* asterisk */) {
var lineStartPos = pos + 1;
pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, spacesToRemoveAfterAsterisk);
if (spacesToRemoveAfterAsterisk === undefined && pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
spacesToRemoveAfterAsterisk = pos - lineStartPos;
}
}
else if (spacesToRemoveAfterAsterisk === undefined) {
spacesToRemoveAfterAsterisk = 0;
}
while (pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
var ch = sourceFile.text.charAt(pos);
if (ch === "@") {
if (isParamTag(pos, end, sourceFile)) {
isInParamTag = true;
pos += paramTag.length;
continue;
}
else {
isInParamTag = false;
}
}
if (!isInParamTag) {
docCommentTextOfLine += ch;
}
pos++;
}
pos = consumeLineBreaks(pos, end, sourceFile);
if (docCommentTextOfLine) {
pushDocCommentLineText(docComments, docCommentTextOfLine, blankLineCount);
blankLineCount = 0;
}
else if (!isInParamTag && docComments.length) {
blankLineCount++;
}
}
return docComments;
}
function getCleanedParamJsDocComment(pos, end, sourceFile) {
var paramHelpStringMargin;
var paramDocComments = [];
while (pos < end) {
if (isParamTag(pos, end, sourceFile)) {
var blankLineCount = 0;
var recordedParamTag = false;
pos = consumeWhiteSpaces(pos + paramTag.length);
if (pos >= end) {
break;
}
if (sourceFile.text.charCodeAt(pos) === 123 /* openBrace */) {
pos++;
for (var curlies = 1; pos < end; pos++) {
var charCode = sourceFile.text.charCodeAt(pos);
if (charCode === 123 /* openBrace */) {
curlies++;
continue;
}
if (charCode === 125 /* closeBrace */) {
curlies--;
if (curlies === 0) {
pos++;
break;
}
else {
continue;
}
}
if (charCode === 64 /* at */) {
break;
}
}
pos = consumeWhiteSpaces(pos);
if (pos >= end) {
break;
}
}
if (isName(pos, end, sourceFile, name)) {
pos = consumeWhiteSpaces(pos + name.length);
if (pos >= end) {
break;
}
var paramHelpString = "";
var firstLineParamHelpStringPos = pos;
while (pos < end) {
var ch = sourceFile.text.charCodeAt(pos);
if (ts.isLineBreak(ch)) {
if (paramHelpString) {
pushDocCommentLineText(paramDocComments, paramHelpString, blankLineCount);
paramHelpString = "";
blankLineCount = 0;
recordedParamTag = true;
}
else if (recordedParamTag) {
blankLineCount++;
}
setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos);
continue;
}
if (ch === 64 /* at */) {
break;
}
paramHelpString += sourceFile.text.charAt(pos);
pos++;
}
if (paramHelpString) {
pushDocCommentLineText(paramDocComments, paramHelpString, blankLineCount);
}
paramHelpStringMargin = undefined;
}
if (sourceFile.text.charCodeAt(pos) === 64 /* at */) {
continue;
}
}
pos++;
}
return paramDocComments;
function consumeWhiteSpaces(pos) {
while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) {
pos++;
}
return pos;
}
function setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos) {
pos = consumeLineBreaks(pos, end, sourceFile);
if (pos >= end) {
return;
}
if (paramHelpStringMargin === undefined) {
paramHelpStringMargin = sourceFile.getLineAndCharacterFromPosition(firstLineParamHelpStringPos).character - 1;
}
var startOfLinePos = pos;
pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile, paramHelpStringMargin);
if (pos >= end) {
return;
}
var consumedSpaces = pos - startOfLinePos;
if (consumedSpaces < paramHelpStringMargin) {
var ch = sourceFile.text.charCodeAt(pos);
if (ch === 42 /* asterisk */) {
pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, paramHelpStringMargin - consumedSpaces - 1);
}
}
}
}
}
}
var TypeObject = (function () {
function TypeObject(checker, flags) {
this.checker = checker;
this.flags = flags;
}
TypeObject.prototype.getFlags = function () {
return this.flags;
};
TypeObject.prototype.getSymbol = function () {
return this.symbol;
};
TypeObject.prototype.getProperties = function () {
return this.checker.getPropertiesOfType(this);
};
TypeObject.prototype.getProperty = function (propertyName) {
return this.checker.getPropertyOfType(this, propertyName);
};
TypeObject.prototype.getApparentProperties = function () {
return this.checker.getAugmentedPropertiesOfType(this);
};
TypeObject.prototype.getCallSignatures = function () {
return this.checker.getSignaturesOfType(this, 0 /* Call */);
};
TypeObject.prototype.getConstructSignatures = function () {
return this.checker.getSignaturesOfType(this, 1 /* Construct */);
};
TypeObject.prototype.getStringIndexType = function () {
return this.checker.getIndexTypeOfType(this, 0 /* String */);
};
TypeObject.prototype.getNumberIndexType = function () {
return this.checker.getIndexTypeOfType(this, 1 /* Number */);
};
return TypeObject;
})();
var SignatureObject = (function () {
function SignatureObject(checker) {
this.checker = checker;
}
SignatureObject.prototype.getDeclaration = function () {
return this.declaration;
};
SignatureObject.prototype.getTypeParameters = function () {
return this.typeParameters;
};
SignatureObject.prototype.getParameters = function () {
return this.parameters;
};
SignatureObject.prototype.getReturnType = function () {
return this.checker.getReturnTypeOfSignature(this);
};
SignatureObject.prototype.getDocumentationComment = function () {
if (this.documentationComment === undefined) {
this.documentationComment = this.declaration ? getJsDocCommentsFromDeclarations([this.declaration], undefined, false) : [];
}
return this.documentationComment;
};
return SignatureObject;
})();
var SourceFileObject = (function (_super) {
__extends(SourceFileObject, _super);
function SourceFileObject() {
_super.apply(this, arguments);
}
SourceFileObject.prototype.getLineAndCharacterFromPosition = function (position) {
return null;
};
SourceFileObject.prototype.getPositionFromLineAndCharacter = function (line, character) {
return -1;
};
SourceFileObject.prototype.getScriptSnapshot = function () {
return this.scriptSnapshot;
};
SourceFileObject.prototype.getNamedDeclarations = function () {
if (!this.namedDeclarations) {
var sourceFile = this;
var namedDeclarations = [];
ts.forEachChild(sourceFile, function visit(node) {
switch (node.kind) {
case 182 /* FunctionDeclaration */:
case 125 /* Method */:
var functionDeclaration = node;
if (functionDeclaration.name && functionDeclaration.name.kind !== 120 /* Missing */) {
var lastDeclaration = namedDeclarations.length > 0 ? namedDeclarations[namedDeclarations.length - 1] : undefined;
if (lastDeclaration && functionDeclaration.symbol === lastDeclaration.symbol) {
if (functionDeclaration.body && !lastDeclaration.body) {
namedDeclarations[namedDeclarations.length - 1] = functionDeclaration;
}
}
else {
namedDeclarations.push(node);
}
ts.forEachChild(node, visit);
}
break;
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
case 187 /* EnumDeclaration */:
case 188 /* ModuleDeclaration */:
case 190 /* ImportDeclaration */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 134 /* TypeLiteral */:
if (node.name) {
namedDeclarations.push(node);
}
case 126 /* Constructor */:
case 159 /* VariableStatement */:
case 189 /* ModuleBlock */:
case 183 /* FunctionBlock */:
ts.forEachChild(node, visit);
break;
case 123 /* Parameter */:
if (!(node.flags & 112 /* AccessibilityModifier */)) {
break;
}
case 181 /* VariableDeclaration */:
case 192 /* EnumMember */:
case 124 /* Property */:
namedDeclarations.push(node);
break;
}
});
this.namedDeclarations = namedDeclarations;
}
return this.namedDeclarations;
};
SourceFileObject.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) {
if (textChangeRange && ts.Debug.shouldAssert(1 /* Normal */)) {
var oldText = this.scriptSnapshot;
var newText = scriptSnapshot;
TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength());
if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) {
var oldTextPrefix = oldText.getText(0, textChangeRange.span().start());
var newTextPrefix = newText.getText(0, textChangeRange.span().start());
TypeScript.Debug.assert(oldTextPrefix === newTextPrefix);
var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength());
var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength());
TypeScript.Debug.assert(oldTextSuffix === newTextSuffix);
}
}
return SourceFileObject.createSourceFileObject(this.filename, scriptSnapshot, this.languageVersion, version, isOpen);
};
SourceFileObject.createSourceFileObject = function (filename, scriptSnapshot, languageVersion, version, isOpen) {
var newSourceFile = ts.createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen);
newSourceFile.scriptSnapshot = scriptSnapshot;
return newSourceFile;
};
return SourceFileObject;
})(NodeObject);
var TextChange = (function () {
function TextChange() {
}
return TextChange;
})();
ts.TextChange = TextChange;
(function (SymbolDisplayPartKind) {
SymbolDisplayPartKind[SymbolDisplayPartKind["aliasName"] = 0] = "aliasName";
SymbolDisplayPartKind[SymbolDisplayPartKind["className"] = 1] = "className";
SymbolDisplayPartKind[SymbolDisplayPartKind["enumName"] = 2] = "enumName";
SymbolDisplayPartKind[SymbolDisplayPartKind["fieldName"] = 3] = "fieldName";
SymbolDisplayPartKind[SymbolDisplayPartKind["interfaceName"] = 4] = "interfaceName";
SymbolDisplayPartKind[SymbolDisplayPartKind["keyword"] = 5] = "keyword";
SymbolDisplayPartKind[SymbolDisplayPartKind["lineBreak"] = 6] = "lineBreak";
SymbolDisplayPartKind[SymbolDisplayPartKind["numericLiteral"] = 7] = "numericLiteral";
SymbolDisplayPartKind[SymbolDisplayPartKind["stringLiteral"] = 8] = "stringLiteral";
SymbolDisplayPartKind[SymbolDisplayPartKind["localName"] = 9] = "localName";
SymbolDisplayPartKind[SymbolDisplayPartKind["methodName"] = 10] = "methodName";
SymbolDisplayPartKind[SymbolDisplayPartKind["moduleName"] = 11] = "moduleName";
SymbolDisplayPartKind[SymbolDisplayPartKind["operator"] = 12] = "operator";
SymbolDisplayPartKind[SymbolDisplayPartKind["parameterName"] = 13] = "parameterName";
SymbolDisplayPartKind[SymbolDisplayPartKind["propertyName"] = 14] = "propertyName";
SymbolDisplayPartKind[SymbolDisplayPartKind["punctuation"] = 15] = "punctuation";
SymbolDisplayPartKind[SymbolDisplayPartKind["space"] = 16] = "space";
SymbolDisplayPartKind[SymbolDisplayPartKind["text"] = 17] = "text";
SymbolDisplayPartKind[SymbolDisplayPartKind["typeParameterName"] = 18] = "typeParameterName";
SymbolDisplayPartKind[SymbolDisplayPartKind["enumMemberName"] = 19] = "enumMemberName";
SymbolDisplayPartKind[SymbolDisplayPartKind["functionName"] = 20] = "functionName";
SymbolDisplayPartKind[SymbolDisplayPartKind["regularExpressionLiteral"] = 21] = "regularExpressionLiteral";
})(ts.SymbolDisplayPartKind || (ts.SymbolDisplayPartKind = {}));
var SymbolDisplayPartKind = ts.SymbolDisplayPartKind;
(function (TokenClass) {
TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation";
TokenClass[TokenClass["Keyword"] = 1] = "Keyword";
TokenClass[TokenClass["Operator"] = 2] = "Operator";
TokenClass[TokenClass["Comment"] = 3] = "Comment";
TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace";
TokenClass[TokenClass["Identifier"] = 5] = "Identifier";
TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral";
TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral";
TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral";
})(ts.TokenClass || (ts.TokenClass = {}));
var TokenClass = ts.TokenClass;
var ScriptElementKind = (function () {
function ScriptElementKind() {
}
ScriptElementKind.unknown = "";
ScriptElementKind.keyword = "keyword";
ScriptElementKind.scriptElement = "script";
ScriptElementKind.moduleElement = "module";
ScriptElementKind.classElement = "class";
ScriptElementKind.interfaceElement = "interface";
ScriptElementKind.typeElement = "type";
ScriptElementKind.enumElement = "enum";
ScriptElementKind.variableElement = "var";
ScriptElementKind.localVariableElement = "local var";
ScriptElementKind.functionElement = "function";
ScriptElementKind.localFunctionElement = "local function";
ScriptElementKind.memberFunctionElement = "method";
ScriptElementKind.memberGetAccessorElement = "getter";
ScriptElementKind.memberSetAccessorElement = "setter";
ScriptElementKind.memberVariableElement = "property";
ScriptElementKind.constructorImplementationElement = "constructor";
ScriptElementKind.callSignatureElement = "call";
ScriptElementKind.indexSignatureElement = "index";
ScriptElementKind.constructSignatureElement = "construct";
ScriptElementKind.parameterElement = "parameter";
ScriptElementKind.typeParameterElement = "type parameter";
ScriptElementKind.primitiveType = "primitive type";
ScriptElementKind.label = "label";
ScriptElementKind.alias = "alias";
ScriptElementKind.constantElement = "constant";
return ScriptElementKind;
})();
ts.ScriptElementKind = ScriptElementKind;
var ScriptElementKindModifier = (function () {
function ScriptElementKindModifier() {
}
ScriptElementKindModifier.none = "";
ScriptElementKindModifier.publicMemberModifier = "public";
ScriptElementKindModifier.privateMemberModifier = "private";
ScriptElementKindModifier.protectedMemberModifier = "protected";
ScriptElementKindModifier.exportedModifier = "export";
ScriptElementKindModifier.ambientModifier = "declare";
ScriptElementKindModifier.staticModifier = "static";
return ScriptElementKindModifier;
})();
ts.ScriptElementKindModifier = ScriptElementKindModifier;
var ClassificationTypeNames = (function () {
function ClassificationTypeNames() {
}
ClassificationTypeNames.comment = "comment";
ClassificationTypeNames.identifier = "identifier";
ClassificationTypeNames.keyword = "keyword";
ClassificationTypeNames.numericLiteral = "number";
ClassificationTypeNames.operator = "operator";
ClassificationTypeNames.stringLiteral = "string";
ClassificationTypeNames.whiteSpace = "whitespace";
ClassificationTypeNames.text = "text";
ClassificationTypeNames.punctuation = "punctuation";
ClassificationTypeNames.className = "class name";
ClassificationTypeNames.enumName = "enum name";
ClassificationTypeNames.interfaceName = "interface name";
ClassificationTypeNames.moduleName = "module name";
ClassificationTypeNames.typeParameterName = "type parameter name";
return ClassificationTypeNames;
})();
ts.ClassificationTypeNames = ClassificationTypeNames;
var MatchKind;
(function (MatchKind) {
MatchKind[MatchKind["none"] = 0] = "none";
MatchKind[MatchKind["exact"] = 1] = "exact";
MatchKind[MatchKind["substring"] = 2] = "substring";
MatchKind[MatchKind["prefix"] = 3] = "prefix";
})(MatchKind || (MatchKind = {}));
function displayPartsToString(displayParts) {
if (displayParts) {
return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join("");
}
return "";
}
ts.displayPartsToString = displayPartsToString;
var displayPartWriter = getDisplayPartWriter();
function getDisplayPartWriter() {
var displayParts;
var lineStart;
var indent;
resetWriter();
return {
displayParts: function () { return displayParts; },
writeKeyword: function (text) { return writeKind(text, 5 /* keyword */); },
writeOperator: function (text) { return writeKind(text, 12 /* operator */); },
writePunctuation: function (text) { return writeKind(text, 15 /* punctuation */); },
writeSpace: function (text) { return writeKind(text, 16 /* space */); },
writeStringLiteral: function (text) { return writeKind(text, 8 /* stringLiteral */); },
writeParameter: function (text) { return writeKind(text, 13 /* parameterName */); },
writeSymbol: writeSymbol,
writeLine: writeLine,
increaseIndent: function () {
indent++;
},
decreaseIndent: function () {
indent--;
},
clear: resetWriter,
trackSymbol: function () {
}
};
function writeIndent() {
if (lineStart) {
displayParts.push(displayPart(ts.getIndentString(indent), 16 /* space */));
lineStart = false;
}
}
function writeKind(text, kind) {
writeIndent();
displayParts.push(displayPart(text, kind));
}
function writeSymbol(text, symbol) {
writeIndent();
displayParts.push(symbolPart(text, symbol));
}
function writeLine() {
displayParts.push(lineBreakPart());
lineStart = true;
}
function resetWriter() {
displayParts = [];
lineStart = true;
indent = 0;
}
}
function displayPart(text, kind, symbol) {
return {
text: text,
kind: SymbolDisplayPartKind[kind]
};
}
function spacePart() {
return displayPart(" ", 16 /* space */);
}
ts.spacePart = spacePart;
function keywordPart(kind) {
return displayPart(ts.tokenToString(kind), 5 /* keyword */);
}
ts.keywordPart = keywordPart;
function punctuationPart(kind) {
return displayPart(ts.tokenToString(kind), 15 /* punctuation */);
}
ts.punctuationPart = punctuationPart;
function operatorPart(kind) {
return displayPart(ts.tokenToString(kind), 12 /* operator */);
}
ts.operatorPart = operatorPart;
function textPart(text) {
return displayPart(text, 17 /* text */);
}
ts.textPart = textPart;
function lineBreakPart() {
return displayPart("\n", 6 /* lineBreak */);
}
ts.lineBreakPart = lineBreakPart;
function isFirstDeclarationOfSymbolParameter(symbol) {
return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 123 /* Parameter */;
}
function isLocalVariableOrFunction(symbol) {
if (symbol.parent) {
return false;
}
return ts.forEach(symbol.declarations, function (declaration) {
if (declaration.kind === 149 /* FunctionExpression */) {
return true;
}
if (declaration.kind !== 181 /* VariableDeclaration */ && declaration.kind !== 182 /* FunctionDeclaration */) {
return false;
}
for (var parent = declaration.parent; parent.kind !== 183 /* FunctionBlock */; parent = parent.parent) {
if (parent.kind === 193 /* SourceFile */ || parent.kind === 189 /* ModuleBlock */) {
return false;
}
}
return true;
});
}
function symbolPart(text, symbol) {
return displayPart(text, displayPartKind(symbol), symbol);
function displayPartKind(symbol) {
var flags = symbol.flags;
if (flags & 3 /* Variable */) {
return isFirstDeclarationOfSymbolParameter(symbol) ? 13 /* parameterName */ : 9 /* localName */;
}
else if (flags & 4 /* Property */) {
return 14 /* propertyName */;
}
else if (flags & 8 /* EnumMember */) {
return 19 /* enumMemberName */;
}
else if (flags & 16 /* Function */) {
return 20 /* functionName */;
}
else if (flags & 32 /* Class */) {
return 1 /* className */;
}
else if (flags & 64 /* Interface */) {
return 4 /* interfaceName */;
}
else if (flags & 384 /* Enum */) {
return 2 /* enumName */;
}
else if (flags & 1536 /* Module */) {
return 11 /* moduleName */;
}
else if (flags & 8192 /* Method */) {
return 10 /* methodName */;
}
else if (flags & 1048576 /* TypeParameter */) {
return 18 /* typeParameterName */;
}
return 17 /* text */;
}
}
ts.symbolPart = symbolPart;
function mapToDisplayParts(writeDisplayParts) {
writeDisplayParts(displayPartWriter);
var result = displayPartWriter.displayParts();
displayPartWriter.clear();
return result;
}
ts.mapToDisplayParts = mapToDisplayParts;
function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags) {
return mapToDisplayParts(function (writer) {
typechecker.getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
});
}
ts.typeToDisplayParts = typeToDisplayParts;
function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags) {
return mapToDisplayParts(function (writer) {
typeChecker.getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags);
});
}
ts.symbolToDisplayParts = symbolToDisplayParts;
function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, flags) {
return mapToDisplayParts(function (writer) {
typechecker.getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags);
});
}
function getDefaultCompilerOptions() {
return {
target: 2 /* Latest */,
module: 0 /* None */
};
}
ts.getDefaultCompilerOptions = getDefaultCompilerOptions;
function compareDataObjects(dst, src) {
for (var e in dst) {
if (typeof dst[e] === "object") {
if (!compareDataObjects(dst[e], src[e]))
return false;
}
else if (typeof dst[e] !== "function") {
if (dst[e] !== src[e])
return false;
}
}
return true;
}
ts.compareDataObjects = compareDataObjects;
var OperationCanceledException = (function () {
function OperationCanceledException() {
}
return OperationCanceledException;
})();
ts.OperationCanceledException = OperationCanceledException;
var CancellationTokenObject = (function () {
function CancellationTokenObject(cancellationToken) {
this.cancellationToken = cancellationToken;
}
CancellationTokenObject.prototype.isCancellationRequested = function () {
return this.cancellationToken && this.cancellationToken.isCancellationRequested();
};
CancellationTokenObject.prototype.throwIfCancellationRequested = function () {
if (this.isCancellationRequested()) {
throw new OperationCanceledException();
}
};
CancellationTokenObject.None = new CancellationTokenObject(null);
return CancellationTokenObject;
})();
ts.CancellationTokenObject = CancellationTokenObject;
var HostCache = (function () {
function HostCache(host) {
this.host = host;
this.filenameToEntry = {};
var filenames = host.getScriptFileNames();
for (var i = 0, n = filenames.length; i < n; i++) {
var filename = filenames[i];
this.filenameToEntry[ts.normalizeSlashes(filename)] = {
filename: filename,
version: host.getScriptVersion(filename),
isOpen: host.getScriptIsOpen(filename)
};
}
this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions();
}
HostCache.prototype.compilationSettings = function () {
return this._compilationSettings;
};
HostCache.prototype.getEntry = function (filename) {
filename = ts.normalizeSlashes(filename);
return ts.lookUp(this.filenameToEntry, filename);
};
HostCache.prototype.contains = function (filename) {
return !!this.getEntry(filename);
};
HostCache.prototype.getHostfilename = function (filename) {
var hostCacheEntry = this.getEntry(filename);
if (hostCacheEntry) {
return hostCacheEntry.filename;
}
return filename;
};
HostCache.prototype.getFilenames = function () {
var _this = this;
var fileNames = [];
ts.forEachKey(this.filenameToEntry, function (key) {
if (ts.hasProperty(_this.filenameToEntry, key))
fileNames.push(key);
});
return fileNames;
};
HostCache.prototype.getVersion = function (filename) {
return this.getEntry(filename).version;
};
HostCache.prototype.isOpen = function (filename) {
return this.getEntry(filename).isOpen;
};
HostCache.prototype.getScriptSnapshot = function (filename) {
var file = this.getEntry(filename);
if (!file.sourceText) {
file.sourceText = this.host.getScriptSnapshot(file.filename);
}
return file.sourceText;
};
HostCache.prototype.getChangeRange = function (filename, lastKnownVersion, oldScriptSnapshot) {
var currentVersion = this.getVersion(filename);
if (lastKnownVersion === currentVersion) {
return TypeScript.TextChangeRange.unchanged;
}
var scriptSnapshot = this.getScriptSnapshot(filename);
return scriptSnapshot.getChangeRange(oldScriptSnapshot);
};
return HostCache;
})();
var SyntaxTreeCache = (function () {
function SyntaxTreeCache(host) {
this.host = host;
this.currentFilename = "";
this.currentFileVersion = null;
this.currentSourceFile = null;
this.currentFileSyntaxTree = null;
this.hostCache = new HostCache(host);
}
SyntaxTreeCache.prototype.initialize = function (filename) {
ts.Debug.assert(!!this.currentFileSyntaxTree === !!this.currentSourceFile);
var start = new Date().getTime();
this.hostCache = new HostCache(this.host);
this.host.log("SyntaxTreeCache.Initialize: new HostCache: " + (new Date().getTime() - start));
var version = this.hostCache.getVersion(filename);
var syntaxTree = null;
var sourceFile;
if (this.currentFileSyntaxTree === null || this.currentFilename !== filename) {
var scriptSnapshot = this.hostCache.getScriptSnapshot(filename);
var start = new Date().getTime();
syntaxTree = this.createSyntaxTree(filename, scriptSnapshot);
this.host.log("SyntaxTreeCache.Initialize: createSyntaxTree: " + (new Date().getTime() - start));
var start = new Date().getTime();
sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true);
this.host.log("SyntaxTreeCache.Initialize: createSourceFile: " + (new Date().getTime() - start));
var start = new Date().getTime();
fixupParentReferences(sourceFile);
this.host.log("SyntaxTreeCache.Initialize: fixupParentRefs : " + (new Date().getTime() - start));
}
else if (this.currentFileVersion !== version) {
var scriptSnapshot = this.hostCache.getScriptSnapshot(filename);
var start = new Date().getTime();
syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, this.currentSourceFile.getScriptSnapshot(), this.currentFileSyntaxTree, this.currentFileVersion);
this.host.log("SyntaxTreeCache.Initialize: updateSyntaxTree: " + (new Date().getTime() - start));
var editRange = this.hostCache.getChangeRange(filename, this.currentFileVersion, this.currentSourceFile.getScriptSnapshot());
var start = new Date().getTime();
sourceFile = !editRange ? createSourceFileFromScriptSnapshot(filename, scriptSnapshot, getDefaultCompilerOptions(), version, true) : this.currentSourceFile.update(scriptSnapshot, version, true, editRange);
this.host.log("SyntaxTreeCache.Initialize: updateSourceFile: " + (new Date().getTime() - start));
var start = new Date().getTime();
fixupParentReferences(sourceFile);
this.host.log("SyntaxTreeCache.Initialize: fixupParentRefs : " + (new Date().getTime() - start));
}
if (syntaxTree !== null) {
ts.Debug.assert(sourceFile !== undefined);
this.currentFileVersion = version;
this.currentFilename = filename;
this.currentFileSyntaxTree = syntaxTree;
this.currentSourceFile = sourceFile;
}
function fixupParentReferences(sourceFile) {
var parent = sourceFile;
function walk(n) {
n.parent = parent;
var saveParent = parent;
parent = n;
ts.forEachChild(n, walk);
parent = saveParent;
}
ts.forEachChild(sourceFile, walk);
}
};
SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (filename) {
this.initialize(filename);
return this.currentFileSyntaxTree;
};
SyntaxTreeCache.prototype.getCurrentSourceFile = function (filename) {
this.initialize(filename);
return this.currentSourceFile;
};
SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (filename) {
this.getCurrentFileSyntaxTree(filename);
return this.getCurrentSourceFile(filename).getScriptSnapshot();
};
SyntaxTreeCache.prototype.createSyntaxTree = function (filename, scriptSnapshot) {
var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot);
var syntaxTree = TypeScript.Parser.parse(filename, text, getDefaultCompilerOptions().target, TypeScript.isDTSFile(filename));
return syntaxTree;
};
SyntaxTreeCache.prototype.updateSyntaxTree = function (filename, scriptSnapshot, previousScriptSnapshot, previousSyntaxTree, previousFileVersion) {
var editRange = this.hostCache.getChangeRange(filename, previousFileVersion, previousScriptSnapshot);
if (editRange === null) {
return this.createSyntaxTree(filename, scriptSnapshot);
}
var nextSyntaxTree = TypeScript.IncrementalParser.parse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot));
this.ensureInvariants(filename, editRange, nextSyntaxTree, previousScriptSnapshot, scriptSnapshot);
return nextSyntaxTree;
};
SyntaxTreeCache.prototype.ensureInvariants = function (filename, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) {
var expectedNewLength = oldScriptSnapshot.getLength() - editRange.span().length() + editRange.newLength();
var actualNewLength = newScriptSnapshot.getLength();
function provideMoreDebugInfo() {
var debugInformation = ["expected length:", expectedNewLength, "and actual length:", actualNewLength, "are not equal\r\n"];
var oldSpan = editRange.span();
function prettyPrintString(s) {
return '"' + s.replace(/\r/g, '\\r').replace(/\n/g, '\\n') + '"';
}
debugInformation.push('Edit range (old text) (start: ' + oldSpan.start() + ', end: ' + oldSpan.end() + ') \r\n');
debugInformation.push('Old text edit range contents: ' + prettyPrintString(oldScriptSnapshot.getText(oldSpan.start(), oldSpan.end())));
var newSpan = editRange.newSpan();
debugInformation.push('Edit range (new text) (start: ' + newSpan.start() + ', end: ' + newSpan.end() + ') \r\n');
debugInformation.push('New text edit range contents: ' + prettyPrintString(newScriptSnapshot.getText(newSpan.start(), newSpan.end())));
return debugInformation.join(' ');
}
ts.Debug.assert(expectedNewLength === actualNewLength, "Expected length is different from actual!", provideMoreDebugInfo);
if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) {
var oldPrefixText = oldScriptSnapshot.getText(0, editRange.span().start());
var newPrefixText = newScriptSnapshot.getText(0, editRange.span().start());
ts.Debug.assert(oldPrefixText === newPrefixText, 'Expected equal prefix texts!');
var oldSuffixText = oldScriptSnapshot.getText(editRange.span().end(), oldScriptSnapshot.getLength());
var newSuffixText = newScriptSnapshot.getText(editRange.newSpan().end(), newScriptSnapshot.getLength());
ts.Debug.assert(oldSuffixText === newSuffixText, 'Expected equal suffix texts!');
var incrementalTreeText = TypeScript.fullText(incrementalTree.sourceUnit());
var actualSnapshotText = newScriptSnapshot.getText(0, newScriptSnapshot.getLength());
ts.Debug.assert(incrementalTreeText === actualSnapshotText, 'Expected full texts to be equal');
}
};
return SyntaxTreeCache;
})();
function createSourceFileFromScriptSnapshot(filename, scriptSnapshot, settings, version, isOpen) {
return SourceFileObject.createSourceFileObject(filename, scriptSnapshot, settings.target, version, isOpen);
}
function createDocumentRegistry() {
var buckets = {};
function getKeyFromCompilationSettings(settings) {
return "_" + settings.target;
}
function getBucketForCompilationSettings(settings, createIfMissing) {
var key = getKeyFromCompilationSettings(settings);
var bucket = ts.lookUp(buckets, key);
if (!bucket && createIfMissing) {
buckets[key] = bucket = {};
}
return bucket;
}
function reportStats() {
var bucketInfoArray = Object.keys(buckets).filter(function (name) { return name && name.charAt(0) === '_'; }).map(function (name) {
var entries = ts.lookUp(buckets, name);
var sourceFiles = [];
for (var i in entries) {
var entry = entries[i];
sourceFiles.push({
name: i,
refCount: entry.refCount,
references: entry.owners.slice(0)
});
}
sourceFiles.sort(function (x, y) { return y.refCount - x.refCount; });
return {
bucket: name,
sourceFiles: sourceFiles
};
});
return JSON.stringify(bucketInfoArray, null, 2);
}
function acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen) {
var bucket = getBucketForCompilationSettings(compilationSettings, true);
var entry = ts.lookUp(bucket, filename);
if (!entry) {
var sourceFile = createSourceFileFromScriptSnapshot(filename, scriptSnapshot, compilationSettings, version, isOpen);
bucket[filename] = entry = {
sourceFile: sourceFile,
refCount: 0,
owners: []
};
}
entry.refCount++;
return entry.sourceFile;
}
function updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange) {
var bucket = getBucketForCompilationSettings(compilationSettings, false);
ts.Debug.assert(bucket !== undefined);
var entry = ts.lookUp(bucket, filename);
ts.Debug.assert(entry !== undefined);
if (entry.sourceFile.isOpen === isOpen && entry.sourceFile.version === version) {
return entry.sourceFile;
}
entry.sourceFile = entry.sourceFile.update(scriptSnapshot, version, isOpen, textChangeRange);
return entry.sourceFile;
}
function releaseDocument(filename, compilationSettings) {
var bucket = getBucketForCompilationSettings(compilationSettings, false);
ts.Debug.assert(bucket !== undefined);
var entry = ts.lookUp(bucket, filename);
entry.refCount--;
ts.Debug.assert(entry.refCount >= 0);
if (entry.refCount === 0) {
delete bucket[filename];
}
}
return {
acquireDocument: acquireDocument,
updateDocument: updateDocument,
releaseDocument: releaseDocument,
reportStats: reportStats
};
}
ts.createDocumentRegistry = createDocumentRegistry;
function preProcessFile(sourceText, readImportFiles) {
if (readImportFiles === void 0) { readImportFiles = true; }
var referencedFiles = [];
var importedFiles = [];
var isNoDefaultLib = false;
function processTripleSlashDirectives() {
var commentRanges = ts.getLeadingCommentRanges(sourceText, 0);
ts.forEach(commentRanges, function (commentRange) {
var comment = sourceText.substring(commentRange.pos, commentRange.end);
var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, commentRange);
if (referencePathMatchResult) {
isNoDefaultLib = referencePathMatchResult.isNoDefaultLib;
var fileReference = referencePathMatchResult.fileReference;
if (fileReference) {
referencedFiles.push(fileReference);
}
}
});
}
function processImport() {
scanner.setText(sourceText);
var token = scanner.scan();
while (token !== 1 /* EndOfFileToken */) {
if (token === 83 /* ImportKeyword */) {
token = scanner.scan();
if (token === 63 /* Identifier */) {
token = scanner.scan();
if (token === 51 /* EqualsToken */) {
token = scanner.scan();
if (token === 115 /* RequireKeyword */) {
token = scanner.scan();
if (token === 15 /* OpenParenToken */) {
token = scanner.scan();
if (token === 7 /* StringLiteral */) {
var importPath = scanner.getTokenValue();
var pos = scanner.getTokenPos();
importedFiles.push({
filename: importPath,
pos: pos,
end: pos + importPath.length
});
}
}
}
}
}
}
token = scanner.scan();
}
scanner.setText(undefined);
}
if (readImportFiles) {
processImport();
}
processTripleSlashDirectives();
return { referencedFiles: referencedFiles, importedFiles: importedFiles, isLibFile: isNoDefaultLib };
}
ts.preProcessFile = preProcessFile;
function getNodeModifiers(node) {
var flags = node.flags;
var result = [];
if (flags & 32 /* Private */)
result.push(ScriptElementKindModifier.privateMemberModifier);
if (flags & 64 /* Protected */)
result.push(ScriptElementKindModifier.protectedMemberModifier);
if (flags & 16 /* Public */)
result.push(ScriptElementKindModifier.publicMemberModifier);
if (flags & 128 /* Static */)
result.push(ScriptElementKindModifier.staticModifier);
if (flags & 1 /* Export */)
result.push(ScriptElementKindModifier.exportedModifier);
if (ts.isInAmbientContext(node))
result.push(ScriptElementKindModifier.ambientModifier);
return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none;
}
ts.getNodeModifiers = getNodeModifiers;
function getTargetLabel(referenceNode, labelName) {
while (referenceNode) {
if (referenceNode.kind === 174 /* LabeledStatement */ && referenceNode.label.text === labelName) {
return referenceNode.label;
}
referenceNode = referenceNode.parent;
}
return undefined;
}
function isJumpStatementTarget(node) {
return node.kind === 63 /* Identifier */ && (node.parent.kind === 168 /* BreakStatement */ || node.parent.kind === 167 /* ContinueStatement */) && node.parent.label === node;
}
function isLabelOfLabeledStatement(node) {
return node.kind === 63 /* Identifier */ && node.parent.kind === 174 /* LabeledStatement */ && node.parent.label === node;
}
function isLabeledBy(node, labelName) {
for (var owner = node.parent; owner.kind === 174 /* LabeledStatement */; owner = owner.parent) {
if (owner.label.text === labelName) {
return true;
}
}
return false;
}
function isLabelName(node) {
return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node);
}
function isRightSideOfQualifiedName(node) {
return node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node;
}
function isRightSideOfPropertyAccess(node) {
return node && node.parent && node.parent.kind === 142 /* PropertyAccess */ && node.parent.right === node;
}
function isCallExpressionTarget(node) {
if (isRightSideOfPropertyAccess(node)) {
node = node.parent;
}
return node && node.parent && node.parent.kind === 144 /* CallExpression */ && node.parent.func === node;
}
function isNewExpressionTarget(node) {
if (isRightSideOfPropertyAccess(node)) {
node = node.parent;
}
return node && node.parent && node.parent.kind === 145 /* NewExpression */ && node.parent.func === node;
}
function isNameOfModuleDeclaration(node) {
return node.parent.kind === 188 /* ModuleDeclaration */ && node.parent.name === node;
}
function isNameOfFunctionDeclaration(node) {
return node.kind === 63 /* Identifier */ && ts.isAnyFunction(node.parent) && node.parent.name === node;
}
function isNameOfPropertyAssignment(node) {
return (node.kind === 63 /* Identifier */ || node.kind === 7 /* StringLiteral */ || node.kind === 6 /* NumericLiteral */) && node.parent.kind === 141 /* PropertyAssignment */ && node.parent.name === node;
}
function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) {
if (node.kind === 7 /* StringLiteral */ || node.kind === 6 /* NumericLiteral */) {
switch (node.parent.kind) {
case 124 /* Property */:
case 141 /* PropertyAssignment */:
case 192 /* EnumMember */:
case 125 /* Method */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 188 /* ModuleDeclaration */:
return node.parent.name === node;
case 143 /* IndexedAccess */:
return node.parent.index === node;
}
}
return false;
}
function isNameOfExternalModuleImportOrDeclaration(node) {
return node.kind === 7 /* StringLiteral */ && (isNameOfModuleDeclaration(node) || (node.parent.kind === 190 /* ImportDeclaration */ && node.parent.externalModuleName === node));
}
function isInsideComment(sourceFile, token, position) {
return position <= token.getStart(sourceFile) && (isInsideCommentRange(ts.getTrailingCommentRanges(sourceFile.text, token.getFullStart())) || isInsideCommentRange(ts.getLeadingCommentRanges(sourceFile.text, token.getFullStart())));
function isInsideCommentRange(comments) {
return ts.forEach(comments, function (comment) {
if (comment.pos < position && position < comment.end) {
return true;
}
else if (position === comment.end) {
var text = sourceFile.text;
var width = comment.end - comment.pos;
if (width <= 2 || text.charCodeAt(comment.pos + 1) === 47 /* slash */) {
return true;
}
else {
return !(text.charCodeAt(comment.end - 1) === 47 /* slash */ && text.charCodeAt(comment.end - 2) === 42 /* asterisk */);
}
}
return false;
});
}
}
var keywordCompletions = [];
for (var i = 64 /* FirstKeyword */; i <= 119 /* LastKeyword */; i++) {
keywordCompletions.push({
name: ts.tokenToString(i),
kind: ScriptElementKind.keyword,
kindModifiers: ScriptElementKindModifier.none
});
}
function createLanguageService(host, documentRegistry) {
var syntaxTreeCache = new SyntaxTreeCache(host);
var formattingRulesProvider;
var hostCache;
var program;
var typeInfoResolver;
var fullTypeCheckChecker_doNotAccessDirectly;
var useCaseSensitivefilenames = false;
var sourceFilesByName = {};
var documentRegistry = documentRegistry;
var cancellationToken = new CancellationTokenObject(host.getCancellationToken());
var activeCompletionSession;
var writer = undefined;
if (!ts.localizedDiagnosticMessages) {
ts.localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages();
}
function getSourceFile(filename) {
return ts.lookUp(sourceFilesByName, filename);
}
function getFullTypeCheckChecker() {
return fullTypeCheckChecker_doNotAccessDirectly || (fullTypeCheckChecker_doNotAccessDirectly = program.getTypeChecker(true));
}
function createCompilerHost() {
return {
getSourceFile: function (filename, languageVersion) {
var sourceFile = getSourceFile(filename);
return sourceFile && sourceFile.getSourceFile();
},
getCancellationToken: function () { return cancellationToken; },
getCanonicalFileName: function (filename) { return useCaseSensitivefilenames ? filename : filename.toLowerCase(); },
useCaseSensitiveFileNames: function () { return useCaseSensitivefilenames; },
getNewLine: function () { return "\r\n"; },
getDefaultLibFilename: function () {
return host.getDefaultLibFilename();
},
writeFile: function (filename, data, writeByteOrderMark) {
writer(filename, data, writeByteOrderMark);
},
getCurrentDirectory: function () {
return host.getCurrentDirectory();
}
};
}
function sourceFileUpToDate(sourceFile) {
return sourceFile && sourceFile.version === hostCache.getVersion(sourceFile.filename) && sourceFile.isOpen === hostCache.isOpen(sourceFile.filename);
}
function programUpToDate() {
if (!program) {
return false;
}
var hostFilenames = hostCache.getFilenames();
if (program.getSourceFiles().length !== hostFilenames.length) {
return false;
}
for (var i = 0, n = hostFilenames.length; i < n; i++) {
if (!sourceFileUpToDate(program.getSourceFile(hostFilenames[i]))) {
return false;
}
}
return compareDataObjects(program.getCompilerOptions(), hostCache.compilationSettings());
}
function synchronizeHostData() {
hostCache = new HostCache(host);
if (programUpToDate()) {
return;
}
var compilationSettings = hostCache.compilationSettings();
var oldProgram = program;
if (oldProgram) {
var oldSettings = program.getCompilerOptions();
var settingsChangeAffectsSyntax = oldSettings.target !== compilationSettings.target || oldSettings.module !== compilationSettings.module;
var changesInCompilationSettingsAffectSyntax = oldSettings && compilationSettings && !compareDataObjects(oldSettings, compilationSettings) && settingsChangeAffectsSyntax;
var oldSourceFiles = program.getSourceFiles();
for (var i = 0, n = oldSourceFiles.length; i < n; i++) {
cancellationToken.throwIfCancellationRequested();
var filename = oldSourceFiles[i].filename;
if (!hostCache.contains(filename) || changesInCompilationSettingsAffectSyntax) {
documentRegistry.releaseDocument(filename, oldSettings);
delete sourceFilesByName[filename];
}
}
}
var hostfilenames = hostCache.getFilenames();
for (var i = 0, n = hostfilenames.length; i < n; i++) {
var filename = hostfilenames[i];
var version = hostCache.getVersion(filename);
var isOpen = hostCache.isOpen(filename);
var scriptSnapshot = hostCache.getScriptSnapshot(filename);
var sourceFile = getSourceFile(filename);
if (sourceFile) {
if (sourceFileUpToDate(sourceFile)) {
continue;
}
var textChangeRange = null;
if (sourceFile.isOpen && isOpen) {
textChangeRange = hostCache.getChangeRange(filename, sourceFile.version, sourceFile.getScriptSnapshot());
}
sourceFile = documentRegistry.updateDocument(sourceFile, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange);
}
else {
sourceFile = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, version, isOpen);
}
sourceFilesByName[filename] = sourceFile;
}
program = ts.createProgram(hostfilenames, compilationSettings, createCompilerHost());
typeInfoResolver = program.getTypeChecker(false);
fullTypeCheckChecker_doNotAccessDirectly = undefined;
}
function cleanupSemanticCache() {
if (program) {
typeInfoResolver = program.getTypeChecker(false);
fullTypeCheckChecker_doNotAccessDirectly = undefined;
}
}
function dispose() {
if (program) {
ts.forEach(program.getSourceFiles(), function (f) {
documentRegistry.releaseDocument(f.filename, program.getCompilerOptions());
});
}
}
function getSyntacticDiagnostics(filename) {
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
return program.getDiagnostics(getSourceFile(filename).getSourceFile());
}
function getSemanticDiagnostics(filename) {
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
var compilerOptions = program.getCompilerOptions();
var checker = getFullTypeCheckChecker();
var targetSourceFile = getSourceFile(filename);
var allDiagnostics = checker.getDiagnostics(targetSourceFile);
if (compilerOptions.declaration) {
var savedWriter = writer;
writer = function (filename, data, writeByteOrderMark) {
};
allDiagnostics = allDiagnostics.concat(checker.emitFiles(targetSourceFile).errors);
writer = savedWriter;
}
return allDiagnostics;
}
function getCompilerOptionsDiagnostics() {
synchronizeHostData();
return program.getGlobalDiagnostics();
}
function getValidCompletionEntryDisplayName(symbol, target) {
var displayName = symbol.getName();
if (displayName && displayName.length > 0) {
var firstCharCode = displayName.charCodeAt(0);
if ((symbol.flags & 1536 /* Namespace */) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) {
return undefined;
}
if (displayName && displayName.length >= 2 && firstCharCode === displayName.charCodeAt(displayName.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) {
displayName = displayName.substring(1, displayName.length - 1);
}
var isValid = ts.isIdentifierStart(displayName.charCodeAt(0), target);
for (var i = 1, n = displayName.length; isValid && i < n; i++) {
isValid = ts.isIdentifierPart(displayName.charCodeAt(i), target);
}
if (isValid) {
return ts.unescapeIdentifier(displayName);
}
}
return undefined;
}
function createCompletionEntry(symbol, typeChecker, location) {
var displayName = getValidCompletionEntryDisplayName(symbol, program.getCompilerOptions().target);
if (!displayName) {
return undefined;
}
return {
name: displayName,
kind: getSymbolKind(symbol, typeChecker, location),
kindModifiers: getSymbolModifiers(symbol)
};
}
function getCompletionsAtPosition(filename, position, isMemberCompletion) {
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
var syntacticStart = new Date().getTime();
var sourceFile = getSourceFile(filename);
var start = new Date().getTime();
var currentToken = ts.getTokenAtPosition(sourceFile, position);
host.log("getCompletionsAtPosition: Get current token: " + (new Date().getTime() - start));
var start = new Date().getTime();
var insideComment = isInsideComment(sourceFile, currentToken, position);
host.log("getCompletionsAtPosition: Is inside comment: " + (new Date().getTime() - start));
if (insideComment) {
host.log("Returning an empty list because completion was inside a comment.");
return undefined;
}
var start = new Date().getTime();
var previousToken = ts.findPrecedingToken(position, sourceFile);
host.log("getCompletionsAtPosition: Get previous token 1: " + (new Date().getTime() - start));
if (previousToken && position <= previousToken.end && previousToken.kind === 63 /* Identifier */) {
var start = new Date().getTime();
previousToken = ts.findPrecedingToken(previousToken.pos, sourceFile);
host.log("getCompletionsAtPosition: Get previous token 2: " + (new Date().getTime() - start));
}
if (previousToken && isCompletionListBlocker(previousToken)) {
host.log("Returning an empty list because completion was requested in an invalid position.");
return undefined;
}
var node;
var isRightOfDot;
if (previousToken && previousToken.kind === 19 /* DotToken */ && (previousToken.parent.kind === 142 /* PropertyAccess */ || previousToken.parent.kind === 121 /* QualifiedName */)) {
node = previousToken.parent.left;
isRightOfDot = true;
}
else {
node = currentToken;
isRightOfDot = false;
}
activeCompletionSession = {
filename: filename,
position: position,
entries: [],
symbols: {},
typeChecker: typeInfoResolver
};
host.log("getCompletionsAtPosition: Syntactic work: " + (new Date().getTime() - syntacticStart));
var location = ts.getTouchingPropertyName(sourceFile, position);
var semanticStart = new Date().getTime();
if (isRightOfDot) {
var symbols = [];
isMemberCompletion = true;
if (node.kind === 63 /* Identifier */ || node.kind === 121 /* QualifiedName */ || node.kind === 142 /* PropertyAccess */) {
var symbol = typeInfoResolver.getSymbolInfo(node);
if (symbol && symbol.flags & 33554432 /* Import */) {
symbol = typeInfoResolver.getAliasedSymbol(symbol);
}
if (symbol && symbol.flags & 1952 /* HasExports */) {
ts.forEachValue(symbol.exports, function (symbol) {
if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) {
symbols.push(symbol);
}
});
}
}
var type = typeInfoResolver.getTypeOfNode(node);
if (type) {
ts.forEach(type.getApparentProperties(), function (symbol) {
if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) {
symbols.push(symbol);
}
});
}
getCompletionEntriesFromSymbols(symbols, activeCompletionSession);
}
else {
var containingObjectLiteral = getContainingObjectLiteralApplicableForCompletion(previousToken);
if (containingObjectLiteral) {
isMemberCompletion = true;
var contextualType = typeInfoResolver.getContextualType(containingObjectLiteral);
if (!contextualType) {
return undefined;
}
var contextualTypeMembers = typeInfoResolver.getPropertiesOfType(contextualType);
if (contextualTypeMembers && contextualTypeMembers.length > 0) {
var filteredMembers = filterContextualMembersList(contextualTypeMembers, containingObjectLiteral.properties);
getCompletionEntriesFromSymbols(filteredMembers, activeCompletionSession);
}
}
else {
isMemberCompletion = false;
var symbolMeanings = 3152352 /* Type */ | 107455 /* Value */ | 1536 /* Namespace */ | 33554432 /* Import */;
var symbols = typeInfoResolver.getSymbolsInScope(node, symbolMeanings);
getCompletionEntriesFromSymbols(symbols, activeCompletionSession);
}
}
if (!isMemberCompletion) {
Array.prototype.push.apply(activeCompletionSession.entries, keywordCompletions);
}
host.log("getCompletionsAtPosition: Semantic work: " + (new Date().getTime() - semanticStart));
return {
isMemberCompletion: isMemberCompletion,
entries: activeCompletionSession.entries
};
function getCompletionEntriesFromSymbols(symbols, session) {
var start = new Date().getTime();
ts.forEach(symbols, function (symbol) {
var entry = createCompletionEntry(symbol, session.typeChecker, location);
if (entry) {
var id = ts.escapeIdentifier(entry.name);
if (!ts.lookUp(session.symbols, id)) {
session.entries.push(entry);
session.symbols[id] = symbol;
}
}
});
host.log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (new Date().getTime() - start));
}
function isCompletionListBlocker(previousToken) {
var start = new Date().getTime();
var result = isInStringOrRegularExpressionOrTemplateLiteral(previousToken) || isIdentifierDefinitionLocation(previousToken) || isRightOfIllegalDot(previousToken);
host.log("getCompletionsAtPosition: isCompletionListBlocker: " + (new Date().getTime() - start));
return result;
}
function isInStringOrRegularExpressionOrTemplateLiteral(previousToken) {
if (previousToken.kind === 7 /* StringLiteral */ || ts.isTemplateLiteralKind(previousToken.kind)) {
var start = previousToken.getStart();
var end = previousToken.getEnd();
if (start < position && position < end) {
return true;
}
else if (position === end) {
var width = end - start;
var text = previousToken.getSourceFile().text;
if (width <= 1 || text.charCodeAt(end - 2) === 92 /* backslash */) {
return true;
}
switch (previousToken.kind) {
case 7 /* StringLiteral */:
case 9 /* NoSubstitutionTemplateLiteral */:
return text.charCodeAt(start) !== text.charCodeAt(end - 1);
case 10 /* TemplateHead */:
case 11 /* TemplateMiddle */:
return text.charCodeAt(end - 1) !== 123 /* openBrace */ || text.charCodeAt(end - 2) !== 36 /* $ */;
case 12 /* TemplateTail */:
return text.charCodeAt(end - 1) !== 96 /* backtick */;
}
return false;
}
}
else if (previousToken.kind === 8 /* RegularExpressionLiteral */) {
return previousToken.getStart() < position && position < previousToken.getEnd();
}
return false;
}
function getContainingObjectLiteralApplicableForCompletion(previousToken) {
if (previousToken) {
var parent = previousToken.parent;
switch (previousToken.kind) {
case 13 /* OpenBraceToken */:
case 22 /* CommaToken */:
if (parent && parent.kind === 140 /* ObjectLiteral */) {
return parent;
}
break;
}
}
return undefined;
}
function isFunction(kind) {
switch (kind) {
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
case 182 /* FunctionDeclaration */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 129 /* CallSignature */:
case 130 /* ConstructSignature */:
case 131 /* IndexSignature */:
return true;
}
return false;
}
function isIdentifierDefinitionLocation(previousToken) {
if (previousToken) {
var containingNodeKind = previousToken.parent.kind;
switch (previousToken.kind) {
case 22 /* CommaToken */:
return containingNodeKind === 181 /* VariableDeclaration */ || containingNodeKind === 159 /* VariableStatement */ || containingNodeKind === 187 /* EnumDeclaration */ || isFunction(containingNodeKind);
case 15 /* OpenParenToken */:
return containingNodeKind === 178 /* CatchBlock */ || isFunction(containingNodeKind);
case 13 /* OpenBraceToken */:
return containingNodeKind === 187 /* EnumDeclaration */ || containingNodeKind === 185 /* InterfaceDeclaration */;
case 21 /* SemicolonToken */:
return containingNodeKind === 124 /* Property */ && previousToken.parent.parent.kind === 185 /* InterfaceDeclaration */;
case 106 /* PublicKeyword */:
case 104 /* PrivateKeyword */:
case 107 /* StaticKeyword */:
case 20 /* DotDotDotToken */:
return containingNodeKind === 123 /* Parameter */;
case 67 /* ClassKeyword */:
case 114 /* ModuleKeyword */:
case 75 /* EnumKeyword */:
case 101 /* InterfaceKeyword */:
case 81 /* FunctionKeyword */:
case 96 /* VarKeyword */:
case 113 /* GetKeyword */:
case 117 /* SetKeyword */:
case 83 /* ImportKeyword */:
return true;
}
switch (previousToken.getText()) {
case "class":
case "interface":
case "enum":
case "module":
case "function":
case "var":
return true;
}
}
return false;
}
function isRightOfIllegalDot(previousToken) {
if (previousToken && previousToken.kind === 6 /* NumericLiteral */) {
var text = previousToken.getFullText();
return text.charAt(text.length - 1) === ".";
}
return false;
}
function filterContextualMembersList(contextualMemberSymbols, existingMembers) {
if (!existingMembers || existingMembers.length === 0) {
return contextualMemberSymbols;
}
var existingMemberNames = {};
ts.forEach(existingMembers, function (m) {
if (m.kind !== 141 /* PropertyAssignment */) {
return;
}
if (m.getStart() <= position && position <= m.getEnd()) {
return;
}
existingMemberNames[m.name.text] = true;
});
var filteredMembers = [];
ts.forEach(contextualMemberSymbols, function (s) {
if (!existingMemberNames[s.name]) {
filteredMembers.push(s);
}
});
return filteredMembers;
}
}
function getCompletionEntryDetails(filename, position, entryName) {
filename = ts.normalizeSlashes(filename);
var sourceFile = getSourceFile(filename);
var session = activeCompletionSession;
if (!session || session.filename !== filename || session.position !== position) {
return undefined;
}
var symbol = ts.lookUp(activeCompletionSession.symbols, ts.escapeIdentifier(entryName));
if (symbol) {
var location = ts.getTouchingPropertyName(sourceFile, position);
var completionEntry = createCompletionEntry(symbol, session.typeChecker, location);
ts.Debug.assert(session.typeChecker.getNarrowedTypeOfSymbol(symbol, location) !== undefined, "Could not find type for symbol");
var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getSourceFile(filename), location, session.typeChecker, location, 7 /* All */);
return {
name: entryName,
kind: displayPartsDocumentationsAndSymbolKind.symbolKind,
kindModifiers: completionEntry.kindModifiers,
displayParts: displayPartsDocumentationsAndSymbolKind.displayParts,
documentation: displayPartsDocumentationsAndSymbolKind.documentation
};
}
else {
return {
name: entryName,
kind: ScriptElementKind.keyword,
kindModifiers: ScriptElementKindModifier.none,
displayParts: [displayPart(entryName, 5 /* keyword */)],
documentation: undefined
};
}
}
function getContainerNode(node) {
while (true) {
node = node.parent;
if (!node) {
return node;
}
switch (node.kind) {
case 193 /* SourceFile */:
case 125 /* Method */:
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 184 /* ClassDeclaration */:
case 185 /* InterfaceDeclaration */:
case 187 /* EnumDeclaration */:
case 188 /* ModuleDeclaration */:
return node;
}
}
}
function getSymbolKind(symbol, typeResolver, location) {
var flags = symbol.getFlags();
if (flags & 32 /* Class */)
return ScriptElementKind.classElement;
if (flags & 384 /* Enum */)
return ScriptElementKind.enumElement;
if (flags & 2097152 /* TypeAlias */)
return ScriptElementKind.typeElement;
if (flags & 64 /* Interface */)
return ScriptElementKind.interfaceElement;
if (flags & 1048576 /* TypeParameter */)
return ScriptElementKind.typeParameterElement;
var result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver, location);
if (result === ScriptElementKind.unknown) {
if (flags & 1048576 /* TypeParameter */)
return ScriptElementKind.typeParameterElement;
if (flags & 8 /* EnumMember */)
return ScriptElementKind.variableElement;
if (flags & 33554432 /* Import */)
return ScriptElementKind.alias;
}
return result;
}
function getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver, location) {
if (typeResolver.isUndefinedSymbol(symbol)) {
return ScriptElementKind.variableElement;
}
if (typeResolver.isArgumentsSymbol(symbol)) {
return ScriptElementKind.localVariableElement;
}
if (flags & 3 /* Variable */) {
if (isFirstDeclarationOfSymbolParameter(symbol)) {
return ScriptElementKind.parameterElement;
}
else if (symbol.valueDeclaration && symbol.valueDeclaration.flags & 4096 /* Const */) {
return ScriptElementKind.constantElement;
}
return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement;
}
if (flags & 16 /* Function */)
return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement;
if (flags & 32768 /* GetAccessor */)
return ScriptElementKind.memberGetAccessorElement;
if (flags & 65536 /* SetAccessor */)
return ScriptElementKind.memberSetAccessorElement;
if (flags & 8192 /* Method */)
return ScriptElementKind.memberFunctionElement;
if (flags & 16384 /* Constructor */)
return ScriptElementKind.constructorImplementationElement;
if (flags & 4 /* Property */) {
if (flags & 1073741824 /* UnionProperty */) {
var unionPropertyKind = ts.forEach(typeInfoResolver.getRootSymbols(symbol), function (rootSymbol) {
var rootSymbolFlags = rootSymbol.getFlags();
if (rootSymbolFlags & (98308 /* PropertyOrAccessor */ | 3 /* Variable */)) {
return ScriptElementKind.memberVariableElement;
}
ts.Debug.assert(!!(rootSymbolFlags & 8192 /* Method */));
});
if (!unionPropertyKind) {
var typeOfUnionProperty = typeInfoResolver.getNarrowedTypeOfSymbol(symbol, location);
if (typeOfUnionProperty.getCallSignatures().length) {
return ScriptElementKind.memberFunctionElement;
}
return ScriptElementKind.memberVariableElement;
}
return unionPropertyKind;
}
return ScriptElementKind.memberVariableElement;
}
return ScriptElementKind.unknown;
}
function getTypeKind(type) {
var flags = type.getFlags();
if (flags & 128 /* Enum */)
return ScriptElementKind.enumElement;
if (flags & 1024 /* Class */)
return ScriptElementKind.classElement;
if (flags & 2048 /* Interface */)
return ScriptElementKind.interfaceElement;
if (flags & 512 /* TypeParameter */)
return ScriptElementKind.typeParameterElement;
if (flags & 127 /* Intrinsic */)
return ScriptElementKind.primitiveType;
if (flags & 256 /* StringLiteral */)
return ScriptElementKind.primitiveType;
return ScriptElementKind.unknown;
}
function getNodeKind(node) {
switch (node.kind) {
case 188 /* ModuleDeclaration */: return ScriptElementKind.moduleElement;
case 184 /* ClassDeclaration */: return ScriptElementKind.classElement;
case 185 /* InterfaceDeclaration */: return ScriptElementKind.interfaceElement;
case 186 /* TypeAliasDeclaration */: return ScriptElementKind.typeElement;
case 187 /* EnumDeclaration */: return ScriptElementKind.enumElement;
case 181 /* VariableDeclaration */: return node.flags & 4096 /* Const */ ? ScriptElementKind.constantElement : ScriptElementKind.variableElement;
case 182 /* FunctionDeclaration */: return ScriptElementKind.functionElement;
case 127 /* GetAccessor */: return ScriptElementKind.memberGetAccessorElement;
case 128 /* SetAccessor */: return ScriptElementKind.memberSetAccessorElement;
case 125 /* Method */: return ScriptElementKind.memberFunctionElement;
case 124 /* Property */: return ScriptElementKind.memberVariableElement;
case 131 /* IndexSignature */: return ScriptElementKind.indexSignatureElement;
case 130 /* ConstructSignature */: return ScriptElementKind.constructSignatureElement;
case 129 /* CallSignature */: return ScriptElementKind.callSignatureElement;
case 126 /* Constructor */: return ScriptElementKind.constructorImplementationElement;
case 122 /* TypeParameter */: return ScriptElementKind.typeParameterElement;
case 192 /* EnumMember */: return ScriptElementKind.variableElement;
case 123 /* Parameter */: return (node.flags & 112 /* AccessibilityModifier */) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement;
}
return ScriptElementKind.unknown;
}
function getSymbolModifiers(symbol) {
return symbol && symbol.declarations && symbol.declarations.length > 0 ? getNodeModifiers(symbol.declarations[0]) : ScriptElementKindModifier.none;
}
function getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, enclosingDeclaration, typeResolver, location, semanticMeaning) {
if (semanticMeaning === void 0) { semanticMeaning = getMeaningFromLocation(location); }
var displayParts = [];
var documentation;
var symbolFlags = symbol.flags;
var symbolKind = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, symbolFlags, typeResolver, location);
var hasAddedSymbolInfo;
if (symbolKind !== ScriptElementKind.unknown || symbolFlags & 32 /* Class */ || symbolFlags & 33554432 /* Import */) {
if (symbolKind === ScriptElementKind.memberGetAccessorElement || symbolKind === ScriptElementKind.memberSetAccessorElement) {
symbolKind = ScriptElementKind.memberVariableElement;
}
var type = typeResolver.getNarrowedTypeOfSymbol(symbol, location);
if (type) {
if (location.parent && location.parent.kind === 142 /* PropertyAccess */) {
var right = location.parent.right;
if (right === location || (right && right.kind === 120 /* Missing */)) {
location = location.parent;
}
}
var callExpression;
if (location.kind === 144 /* CallExpression */ || location.kind === 145 /* NewExpression */) {
callExpression = location;
}
else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) {
callExpression = location.parent;
}
if (callExpression) {
var candidateSignatures = [];
signature = typeResolver.getResolvedSignature(callExpression, candidateSignatures);
if (!signature && candidateSignatures.length) {
signature = candidateSignatures[0];
}
var useConstructSignatures = callExpression.kind === 145 /* NewExpression */ || callExpression.func.kind === 89 /* SuperKeyword */;
var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
if (!ts.contains(allSignatures, signature.target || signature)) {
signature = allSignatures.length ? allSignatures[0] : undefined;
}
if (signature) {
if (useConstructSignatures && (symbolFlags & 32 /* Class */)) {
symbolKind = ScriptElementKind.constructorImplementationElement;
addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
}
else if (symbolFlags & 33554432 /* Import */) {
symbolKind = ScriptElementKind.alias;
displayParts.push(punctuationPart(15 /* OpenParenToken */));
displayParts.push(textPart(symbolKind));
displayParts.push(punctuationPart(16 /* CloseParenToken */));
displayParts.push(spacePart());
if (useConstructSignatures) {
displayParts.push(keywordPart(86 /* NewKeyword */));
displayParts.push(spacePart());
}
addFullSymbolName(symbol);
}
else {
addPrefixForAnyFunctionOrVar(symbol, symbolKind);
}
switch (symbolKind) {
case ScriptElementKind.memberVariableElement:
case ScriptElementKind.variableElement:
case ScriptElementKind.constantElement:
case ScriptElementKind.parameterElement:
case ScriptElementKind.localVariableElement:
displayParts.push(punctuationPart(50 /* ColonToken */));
displayParts.push(spacePart());
if (useConstructSignatures) {
displayParts.push(keywordPart(86 /* NewKeyword */));
displayParts.push(spacePart());
}
if (!(type.flags & 32768 /* Anonymous */)) {
displayParts.push.apply(displayParts, symbolToDisplayParts(typeResolver, type.symbol, enclosingDeclaration, undefined, 1 /* WriteTypeParametersOrArguments */));
}
addSignatureDisplayParts(signature, allSignatures, 8 /* WriteArrowStyleSignature */);
break;
default:
addSignatureDisplayParts(signature, allSignatures);
}
hasAddedSymbolInfo = true;
}
}
else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304 /* Accessor */)) || (location.kind === 111 /* ConstructorKeyword */ && location.parent.kind === 126 /* Constructor */)) {
var signature;
var functionDeclaration = location.parent;
var allSignatures = functionDeclaration.kind === 126 /* Constructor */ ? type.getConstructSignatures() : type.getCallSignatures();
if (!typeResolver.isImplementationOfOverload(functionDeclaration)) {
signature = typeResolver.getSignatureFromDeclaration(functionDeclaration);
}
else {
signature = allSignatures[0];
}
if (functionDeclaration.kind === 126 /* Constructor */) {
addPrefixForAnyFunctionOrVar(type.symbol, ScriptElementKind.constructorImplementationElement);
}
else {
addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 129 /* CallSignature */ && !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind);
}
addSignatureDisplayParts(signature, allSignatures);
hasAddedSymbolInfo = true;
}
}
}
if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo) {
displayParts.push(keywordPart(67 /* ClassKeyword */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
writeTypeParametersOfSymbol(symbol, sourceFile);
}
if ((symbolFlags & 64 /* Interface */) && (semanticMeaning & 2 /* Type */)) {
addNewLineIfDisplayPartsExist();
displayParts.push(keywordPart(101 /* InterfaceKeyword */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
writeTypeParametersOfSymbol(symbol, sourceFile);
}
if (symbolFlags & 2097152 /* TypeAlias */) {
addNewLineIfDisplayPartsExist();
displayParts.push(keywordPart(119 /* TypeKeyword */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
displayParts.push(spacePart());
displayParts.push(punctuationPart(51 /* EqualsToken */));
displayParts.push(spacePart());
displayParts.push.apply(displayParts, typeToDisplayParts(typeResolver, typeResolver.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration));
}
if (symbolFlags & 384 /* Enum */) {
addNewLineIfDisplayPartsExist();
displayParts.push(keywordPart(75 /* EnumKeyword */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
}
if (symbolFlags & 1536 /* Module */) {
addNewLineIfDisplayPartsExist();
displayParts.push(keywordPart(114 /* ModuleKeyword */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
}
if ((symbolFlags & 1048576 /* TypeParameter */) && (semanticMeaning & 2 /* Type */)) {
addNewLineIfDisplayPartsExist();
displayParts.push(punctuationPart(15 /* OpenParenToken */));
displayParts.push(textPart("type parameter"));
displayParts.push(punctuationPart(16 /* CloseParenToken */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
displayParts.push(spacePart());
displayParts.push(keywordPart(84 /* InKeyword */));
displayParts.push(spacePart());
if (symbol.parent) {
addFullSymbolName(symbol.parent, enclosingDeclaration);
writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration);
}
else {
var signatureDeclaration = ts.getDeclarationOfKind(symbol, 122 /* TypeParameter */).parent;
var signature = typeResolver.getSignatureFromDeclaration(signatureDeclaration);
if (signatureDeclaration.kind === 130 /* ConstructSignature */) {
displayParts.push(keywordPart(86 /* NewKeyword */));
displayParts.push(spacePart());
}
else if (signatureDeclaration.kind !== 129 /* CallSignature */ && signatureDeclaration.name) {
addFullSymbolName(signatureDeclaration.symbol);
}
displayParts.push.apply(displayParts, signatureToDisplayParts(typeResolver, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */));
}
}
if (symbolFlags & 8 /* EnumMember */) {
addPrefixForAnyFunctionOrVar(symbol, "enum member");
var declaration = symbol.declarations[0];
if (declaration.kind === 192 /* EnumMember */) {
var constantValue = typeResolver.getEnumMemberValue(declaration);
if (constantValue !== undefined) {
displayParts.push(spacePart());
displayParts.push(operatorPart(51 /* EqualsToken */));
displayParts.push(spacePart());
displayParts.push(displayPart(constantValue.toString(), 7 /* numericLiteral */));
}
}
}
if (symbolFlags & 33554432 /* Import */) {
addNewLineIfDisplayPartsExist();
displayParts.push(keywordPart(83 /* ImportKeyword */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
ts.forEach(symbol.declarations, function (declaration) {
if (declaration.kind === 190 /* ImportDeclaration */) {
var importDeclaration = declaration;
if (importDeclaration.externalModuleName) {
displayParts.push(spacePart());
displayParts.push(punctuationPart(51 /* EqualsToken */));
displayParts.push(spacePart());
displayParts.push(keywordPart(115 /* RequireKeyword */));
displayParts.push(punctuationPart(15 /* OpenParenToken */));
displayParts.push(displayPart(ts.getTextOfNode(importDeclaration.externalModuleName), 8 /* stringLiteral */));
displayParts.push(punctuationPart(16 /* CloseParenToken */));
}
else {
var internalAliasSymbol = typeResolver.getSymbolInfo(importDeclaration.entityName);
if (internalAliasSymbol) {
displayParts.push(spacePart());
displayParts.push(punctuationPart(51 /* EqualsToken */));
displayParts.push(spacePart());
addFullSymbolName(internalAliasSymbol, enclosingDeclaration);
}
}
return true;
}
});
}
if (!hasAddedSymbolInfo) {
if (symbolKind !== ScriptElementKind.unknown) {
if (type) {
addPrefixForAnyFunctionOrVar(symbol, symbolKind);
if (symbolKind === ScriptElementKind.memberVariableElement || symbolFlags & 3 /* Variable */ || symbolKind === ScriptElementKind.localVariableElement) {
displayParts.push(punctuationPart(50 /* ColonToken */));
displayParts.push(spacePart());
if (type.symbol && type.symbol.flags & 1048576 /* TypeParameter */) {
var typeParameterParts = mapToDisplayParts(function (writer) {
typeResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(type, writer, enclosingDeclaration);
});
displayParts.push.apply(displayParts, typeParameterParts);
}
else {
displayParts.push.apply(displayParts, typeToDisplayParts(typeResolver, type, enclosingDeclaration));
}
}
else if (symbolFlags & 16 /* Function */ || symbolFlags & 8192 /* Method */ || symbolFlags & 16384 /* Constructor */ || symbolFlags & 917504 /* Signature */ || symbolFlags & 98304 /* Accessor */ || symbolKind === ScriptElementKind.memberFunctionElement) {
var allSignatures = type.getCallSignatures();
addSignatureDisplayParts(allSignatures[0], allSignatures);
}
}
}
else {
symbolKind = getSymbolKind(symbol, typeResolver, location);
}
}
if (!documentation) {
documentation = symbol.getDocumentationComment();
}
return { displayParts: displayParts, documentation: documentation, symbolKind: symbolKind };
function addNewLineIfDisplayPartsExist() {
if (displayParts.length) {
displayParts.push(lineBreakPart());
}
}
function addFullSymbolName(symbol, enclosingDeclaration) {
var fullSymbolDisplayParts = symbolToDisplayParts(typeResolver, symbol, enclosingDeclaration || sourceFile, undefined, 1 /* WriteTypeParametersOrArguments */ | 2 /* UseOnlyExternalAliasing */);
displayParts.push.apply(displayParts, fullSymbolDisplayParts);
}
function addPrefixForAnyFunctionOrVar(symbol, symbolKind) {
addNewLineIfDisplayPartsExist();
if (symbolKind) {
displayParts.push(punctuationPart(15 /* OpenParenToken */));
displayParts.push(textPart(symbolKind));
displayParts.push(punctuationPart(16 /* CloseParenToken */));
displayParts.push(spacePart());
addFullSymbolName(symbol);
}
}
function addSignatureDisplayParts(signature, allSignatures, flags) {
displayParts.push.apply(displayParts, signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, flags | 32 /* WriteTypeArgumentsOfSignature */));
if (allSignatures.length > 1) {
displayParts.push(spacePart());
displayParts.push(punctuationPart(15 /* OpenParenToken */));
displayParts.push(operatorPart(32 /* PlusToken */));
displayParts.push(displayPart((allSignatures.length - 1).toString(), 7 /* numericLiteral */));
displayParts.push(spacePart());
displayParts.push(textPart(allSignatures.length === 2 ? "overload" : "overloads"));
displayParts.push(punctuationPart(16 /* CloseParenToken */));
}
documentation = signature.getDocumentationComment();
}
function writeTypeParametersOfSymbol(symbol, enclosingDeclaration) {
var typeParameterParts = mapToDisplayParts(function (writer) {
typeResolver.getSymbolDisplayBuilder().buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration);
});
displayParts.push.apply(displayParts, typeParameterParts);
}
}
function getQuickInfoAtPosition(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getSourceFile(fileName);
var node = ts.getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
var symbol = typeInfoResolver.getSymbolInfo(node);
if (!symbol) {
switch (node.kind) {
case 63 /* Identifier */:
case 142 /* PropertyAccess */:
case 121 /* QualifiedName */:
case 91 /* ThisKeyword */:
case 89 /* SuperKeyword */:
var type = typeInfoResolver.getTypeOfNode(node);
if (type) {
return {
kind: ScriptElementKind.unknown,
kindModifiers: ScriptElementKindModifier.none,
textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()),
displayParts: typeToDisplayParts(typeInfoResolver, type, getContainerNode(node)),
documentation: type.symbol ? type.symbol.getDocumentationComment() : undefined
};
}
}
return undefined;
}
var displayPartsDocumentationsAndKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, getContainerNode(node), typeInfoResolver, node);
return {
kind: displayPartsDocumentationsAndKind.symbolKind,
kindModifiers: getSymbolModifiers(symbol),
textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()),
displayParts: displayPartsDocumentationsAndKind.displayParts,
documentation: displayPartsDocumentationsAndKind.documentation
};
}
function getDefinitionAtPosition(filename, position) {
function getDefinitionInfo(node, symbolKind, symbolName, containerName) {
return {
fileName: node.getSourceFile().filename,
textSpan: TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()),
kind: symbolKind,
name: symbolName,
containerKind: undefined,
containerName: containerName
};
}
function tryAddSignature(signatureDeclarations, selectConstructors, symbolKind, symbolName, containerName, result) {
var declarations = [];
var definition;
ts.forEach(signatureDeclarations, function (d) {
if ((selectConstructors && d.kind === 126 /* Constructor */) || (!selectConstructors && (d.kind === 182 /* FunctionDeclaration */ || d.kind === 125 /* Method */))) {
declarations.push(d);
if (d.body)
definition = d;
}
});
if (definition) {
result.push(getDefinitionInfo(definition, symbolKind, symbolName, containerName));
return true;
}
else if (declarations.length) {
result.push(getDefinitionInfo(declarations[declarations.length - 1], symbolKind, symbolName, containerName));
return true;
}
return false;
}
function tryAddConstructSignature(symbol, location, symbolKind, symbolName, containerName, result) {
if (isNewExpressionTarget(location) || location.kind === 111 /* ConstructorKeyword */) {
if (symbol.flags & 32 /* Class */) {
var classDeclaration = symbol.getDeclarations()[0];
ts.Debug.assert(classDeclaration && classDeclaration.kind === 184 /* ClassDeclaration */);
return tryAddSignature(classDeclaration.members, true, symbolKind, symbolName, containerName, result);
}
}
return false;
}
function tryAddCallSignature(symbol, location, symbolKind, symbolName, containerName, result) {
if (isCallExpressionTarget(location) || isNewExpressionTarget(location) || isNameOfFunctionDeclaration(location)) {
return tryAddSignature(symbol.declarations, false, symbolKind, symbolName, containerName, result);
}
return false;
}
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
var sourceFile = getSourceFile(filename);
var node = ts.getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
if (isJumpStatementTarget(node)) {
var labelName = node.text;
var label = getTargetLabel(node.parent, node.text);
return label ? [getDefinitionInfo(label, ScriptElementKind.label, labelName, undefined)] : undefined;
}
var comment = ts.forEach(sourceFile.referencedFiles, function (r) { return (r.pos <= position && position < r.end) ? r : undefined; });
if (comment) {
var targetFilename = ts.isRootedDiskPath(comment.filename) ? comment.filename : ts.combinePaths(ts.getDirectoryPath(filename), comment.filename);
targetFilename = ts.normalizePath(targetFilename);
if (program.getSourceFile(targetFilename)) {
return [{
fileName: targetFilename,
textSpan: TypeScript.TextSpan.fromBounds(0, 0),
kind: ScriptElementKind.scriptElement,
name: comment.filename,
containerName: undefined,
containerKind: undefined
}];
}
return undefined;
}
var symbol = typeInfoResolver.getSymbolInfo(node);
if (!symbol) {
return undefined;
}
var result = [];
var declarations = symbol.getDeclarations();
var symbolName = typeInfoResolver.symbolToString(symbol);
var symbolKind = getSymbolKind(symbol, typeInfoResolver);
var containerSymbol = symbol.parent;
var containerName = containerSymbol ? typeInfoResolver.symbolToString(containerSymbol, node) : "";
if (!tryAddConstructSignature(symbol, node, symbolKind, symbolName, containerName, result) && !tryAddCallSignature(symbol, node, symbolKind, symbolName, containerName, result)) {
ts.forEach(declarations, function (declaration) {
result.push(getDefinitionInfo(declaration, symbolKind, symbolName, containerName));
});
}
return result;
}
function getOccurrencesAtPosition(filename, position) {
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
var sourceFile = getSourceFile(filename);
var node = ts.getTouchingWord(sourceFile, position);
if (!node) {
return undefined;
}
if (node.kind === 63 /* Identifier */ || node.kind === 91 /* ThisKeyword */ || node.kind === 89 /* SuperKeyword */ || isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) {
return getReferencesForNode(node, [sourceFile], false, false);
}
switch (node.kind) {
case 82 /* IfKeyword */:
case 74 /* ElseKeyword */:
if (hasKind(node.parent, 162 /* IfStatement */)) {
return getIfElseOccurrences(node.parent);
}
break;
case 88 /* ReturnKeyword */:
if (hasKind(node.parent, 169 /* ReturnStatement */)) {
return getReturnOccurrences(node.parent);
}
break;
case 92 /* ThrowKeyword */:
if (hasKind(node.parent, 175 /* ThrowStatement */)) {
return getThrowOccurrences(node.parent);
}
break;
case 94 /* TryKeyword */:
case 66 /* CatchKeyword */:
case 79 /* FinallyKeyword */:
if (hasKind(parent(parent(node)), 176 /* TryStatement */)) {
return getTryCatchFinallyOccurrences(node.parent.parent);
}
break;
case 90 /* SwitchKeyword */:
if (hasKind(node.parent, 171 /* SwitchStatement */)) {
return getSwitchCaseDefaultOccurrences(node.parent);
}
break;
case 65 /* CaseKeyword */:
case 71 /* DefaultKeyword */:
if (hasKind(parent(parent(node)), 171 /* SwitchStatement */)) {
return getSwitchCaseDefaultOccurrences(node.parent.parent);
}
break;
case 64 /* BreakKeyword */:
case 69 /* ContinueKeyword */:
if (hasKind(node.parent, 168 /* BreakStatement */) || hasKind(node.parent, 167 /* ContinueStatement */)) {
return getBreakOrContinueStatementOccurences(node.parent);
}
break;
case 80 /* ForKeyword */:
if (hasKind(node.parent, 165 /* ForStatement */) || hasKind(node.parent, 166 /* ForInStatement */)) {
return getLoopBreakContinueOccurrences(node.parent);
}
break;
case 98 /* WhileKeyword */:
case 73 /* DoKeyword */:
if (hasKind(node.parent, 164 /* WhileStatement */) || hasKind(node.parent, 163 /* DoStatement */)) {
return getLoopBreakContinueOccurrences(node.parent);
}
break;
case 111 /* ConstructorKeyword */:
if (hasKind(node.parent, 126 /* Constructor */)) {
return getConstructorOccurrences(node.parent);
}
break;
case 113 /* GetKeyword */:
case 117 /* SetKeyword */:
if (hasKind(node.parent, 127 /* GetAccessor */) || hasKind(node.parent, 128 /* SetAccessor */)) {
return getGetAndSetOccurrences(node.parent);
}
}
return undefined;
function getIfElseOccurrences(ifStatement) {
var keywords = [];
while (hasKind(ifStatement.parent, 162 /* IfStatement */) && ifStatement.parent.elseStatement === ifStatement) {
ifStatement = ifStatement.parent;
}
while (ifStatement) {
var children = ifStatement.getChildren();
pushKeywordIf(keywords, children[0], 82 /* IfKeyword */);
for (var i = children.length - 1; i >= 0; i--) {
if (pushKeywordIf(keywords, children[i], 74 /* ElseKeyword */)) {
break;
}
}
if (!hasKind(ifStatement.elseStatement, 162 /* IfStatement */)) {
break;
}
ifStatement = ifStatement.elseStatement;
}
var result = [];
for (var i = 0; i < keywords.length; i++) {
if (keywords[i].kind === 74 /* ElseKeyword */ && i < keywords.length - 1) {
var elseKeyword = keywords[i];
var ifKeyword = keywords[i + 1];
var shouldHighlightNextKeyword = true;
for (var j = ifKeyword.getStart() - 1; j >= elseKeyword.end; j--) {
if (!ts.isWhiteSpace(sourceFile.text.charCodeAt(j))) {
shouldHighlightNextKeyword = false;
break;
}
}
if (shouldHighlightNextKeyword) {
result.push({
fileName: filename,
textSpan: TypeScript.TextSpan.fromBounds(elseKeyword.getStart(), ifKeyword.end),
isWriteAccess: false
});
i++;
continue;
}
}
result.push(getReferenceEntryFromNode(keywords[i]));
}
return result;
}
function getReturnOccurrences(returnStatement) {
var func = ts.getContainingFunction(returnStatement);
if (!(func && hasKind(func.body, 183 /* FunctionBlock */))) {
return undefined;
}
var keywords = [];
ts.forEachReturnStatement(func.body, function (returnStatement) {
pushKeywordIf(keywords, returnStatement.getFirstToken(), 88 /* ReturnKeyword */);
});
ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) {
pushKeywordIf(keywords, throwStatement.getFirstToken(), 92 /* ThrowKeyword */);
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getThrowOccurrences(throwStatement) {
var owner = getThrowStatementOwner(throwStatement);
if (!owner) {
return undefined;
}
var keywords = [];
ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) {
pushKeywordIf(keywords, throwStatement.getFirstToken(), 92 /* ThrowKeyword */);
});
if (owner.kind === 183 /* FunctionBlock */) {
ts.forEachReturnStatement(owner, function (returnStatement) {
pushKeywordIf(keywords, returnStatement.getFirstToken(), 88 /* ReturnKeyword */);
});
}
return ts.map(keywords, getReferenceEntryFromNode);
}
function aggregateOwnedThrowStatements(node) {
var statementAccumulator = [];
aggregate(node);
return statementAccumulator;
function aggregate(node) {
if (node.kind === 175 /* ThrowStatement */) {
statementAccumulator.push(node);
}
else if (node.kind === 176 /* TryStatement */) {
var tryStatement = node;
if (tryStatement.catchBlock) {
aggregate(tryStatement.catchBlock);
}
else {
aggregate(tryStatement.tryBlock);
}
if (tryStatement.finallyBlock) {
aggregate(tryStatement.finallyBlock);
}
}
else if (!ts.isAnyFunction(node)) {
ts.forEachChild(node, aggregate);
}
}
;
}
function getThrowStatementOwner(throwStatement) {
var child = throwStatement;
while (child.parent) {
var parent = child.parent;
if (parent.kind === 183 /* FunctionBlock */ || parent.kind === 193 /* SourceFile */) {
return parent;
}
if (parent.kind === 176 /* TryStatement */) {
var tryStatement = parent;
if (tryStatement.tryBlock === child && tryStatement.catchBlock) {
return child;
}
}
child = parent;
}
return undefined;
}
function getTryCatchFinallyOccurrences(tryStatement) {
var keywords = [];
pushKeywordIf(keywords, tryStatement.getFirstToken(), 94 /* TryKeyword */);
if (tryStatement.catchBlock) {
pushKeywordIf(keywords, tryStatement.catchBlock.getFirstToken(), 66 /* CatchKeyword */);
}
if (tryStatement.finallyBlock) {
pushKeywordIf(keywords, tryStatement.finallyBlock.getFirstToken(), 79 /* FinallyKeyword */);
}
return ts.map(keywords, getReferenceEntryFromNode);
}
function getLoopBreakContinueOccurrences(loopNode) {
var keywords = [];
if (pushKeywordIf(keywords, loopNode.getFirstToken(), 80 /* ForKeyword */, 98 /* WhileKeyword */, 73 /* DoKeyword */)) {
if (loopNode.kind === 163 /* DoStatement */) {
var loopTokens = loopNode.getChildren();
for (var i = loopTokens.length - 1; i >= 0; i--) {
if (pushKeywordIf(keywords, loopTokens[i], 98 /* WhileKeyword */)) {
break;
}
}
}
}
var breaksAndContinues = aggregateAllBreakAndContinueStatements(loopNode.statement);
ts.forEach(breaksAndContinues, function (statement) {
if (ownsBreakOrContinueStatement(loopNode, statement)) {
pushKeywordIf(keywords, statement.getFirstToken(), 64 /* BreakKeyword */, 69 /* ContinueKeyword */);
}
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getSwitchCaseDefaultOccurrences(switchStatement) {
var keywords = [];
pushKeywordIf(keywords, switchStatement.getFirstToken(), 90 /* SwitchKeyword */);
ts.forEach(switchStatement.clauses, function (clause) {
pushKeywordIf(keywords, clause.getFirstToken(), 65 /* CaseKeyword */, 71 /* DefaultKeyword */);
var breaksAndContinues = aggregateAllBreakAndContinueStatements(clause);
ts.forEach(breaksAndContinues, function (statement) {
if (ownsBreakOrContinueStatement(switchStatement, statement)) {
pushKeywordIf(keywords, statement.getFirstToken(), 64 /* BreakKeyword */);
}
});
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getBreakOrContinueStatementOccurences(breakOrContinueStatement) {
var owner = getBreakOrContinueOwner(breakOrContinueStatement);
if (owner) {
switch (owner.kind) {
case 165 /* ForStatement */:
case 166 /* ForInStatement */:
case 163 /* DoStatement */:
case 164 /* WhileStatement */:
return getLoopBreakContinueOccurrences(owner);
case 171 /* SwitchStatement */:
return getSwitchCaseDefaultOccurrences(owner);
}
}
return undefined;
}
function aggregateAllBreakAndContinueStatements(node) {
var statementAccumulator = [];
aggregate(node);
return statementAccumulator;
function aggregate(node) {
if (node.kind === 168 /* BreakStatement */ || node.kind === 167 /* ContinueStatement */) {
statementAccumulator.push(node);
}
else if (!ts.isAnyFunction(node)) {
ts.forEachChild(node, aggregate);
}
}
;
}
function ownsBreakOrContinueStatement(owner, statement) {
var actualOwner = getBreakOrContinueOwner(statement);
return actualOwner && actualOwner === owner;
}
function getBreakOrContinueOwner(statement) {
for (var node = statement.parent; node; node = node.parent) {
switch (node.kind) {
case 171 /* SwitchStatement */:
if (statement.kind === 167 /* ContinueStatement */) {
continue;
}
case 165 /* ForStatement */:
case 166 /* ForInStatement */:
case 164 /* WhileStatement */:
case 163 /* DoStatement */:
if (!statement.label || isLabeledBy(node, statement.label.text)) {
return node;
}
break;
default:
if (ts.isAnyFunction(node)) {
return undefined;
}
break;
}
}
return undefined;
}
function getConstructorOccurrences(constructorDeclaration) {
var declarations = constructorDeclaration.symbol.getDeclarations();
var keywords = [];
ts.forEach(declarations, function (declaration) {
ts.forEach(declaration.getChildren(), function (token) {
return pushKeywordIf(keywords, token, 111 /* ConstructorKeyword */);
});
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getGetAndSetOccurrences(accessorDeclaration) {
var keywords = [];
tryPushAccessorKeyword(accessorDeclaration.symbol, 127 /* GetAccessor */);
tryPushAccessorKeyword(accessorDeclaration.symbol, 128 /* SetAccessor */);
return ts.map(keywords, getReferenceEntryFromNode);
function tryPushAccessorKeyword(accessorSymbol, accessorKind) {
var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind);
if (accessor) {
ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 113 /* GetKeyword */, 117 /* SetKeyword */); });
}
}
}
function hasKind(node, kind) {
return node !== undefined && node.kind === kind;
}
function parent(node) {
return node && node.parent;
}
function pushKeywordIf(keywordList, token) {
var expected = [];
for (var _i = 2; _i < arguments.length; _i++) {
expected[_i - 2] = arguments[_i];
}
if (token && ts.contains(expected, token.kind)) {
keywordList.push(token);
return true;
}
return false;
}
}
function findRenameLocations(fileName, position, findInStrings, findInComments) {
return findReferences(fileName, position, findInStrings, findInComments);
}
function getReferencesAtPosition(fileName, position) {
return findReferences(fileName, position, false, false);
}
function findReferences(fileName, position, findInStrings, findInComments) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getSourceFile(fileName);
var node = ts.getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
if (node.kind !== 63 /* Identifier */ && !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && !isNameOfExternalModuleImportOrDeclaration(node)) {
return undefined;
}
ts.Debug.assert(node.kind === 63 /* Identifier */ || node.kind === 6 /* NumericLiteral */ || node.kind === 7 /* StringLiteral */);
return getReferencesForNode(node, program.getSourceFiles(), findInStrings, findInComments);
}
function getReferencesForNode(node, sourceFiles, findInStrings, findInComments) {
if (isLabelName(node)) {
if (isJumpStatementTarget(node)) {
var labelDefinition = getTargetLabel(node.parent, node.text);
return labelDefinition ? getLabelReferencesInNode(labelDefinition.parent, labelDefinition) : [getReferenceEntryFromNode(node)];
}
else {
return getLabelReferencesInNode(node.parent, node);
}
}
if (node.kind === 91 /* ThisKeyword */) {
return getReferencesForThisKeyword(node, sourceFiles);
}
if (node.kind === 89 /* SuperKeyword */) {
return getReferencesForSuperKeyword(node);
}
var symbol = typeInfoResolver.getSymbolInfo(node);
if (!symbol) {
return [getReferenceEntryFromNode(node)];
}
var declarations = symbol.declarations;
if (!declarations || !declarations.length) {
return undefined;
}
var result;
var searchMeaning = getIntersectingMeaningFromDeclarations(getMeaningFromLocation(node), declarations);
var symbolName = getNormalizedSymbolName(symbol.name, declarations);
var scope = getSymbolScope(symbol);
if (scope) {
result = [];
getReferencesInNode(scope, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result);
}
else {
ts.forEach(sourceFiles, function (sourceFile) {
cancellationToken.throwIfCancellationRequested();
if (ts.lookUp(sourceFile.identifiers, symbolName)) {
result = result || [];
getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result);
}
});
}
return result;
function getNormalizedSymbolName(symbolName, declarations) {
var functionExpression = ts.forEach(declarations, function (d) { return d.kind === 149 /* FunctionExpression */ ? d : undefined; });
if (functionExpression && functionExpression.name) {
var name = functionExpression.name.text;
}
else {
var name = symbolName;
}
var length = name.length;
if (length >= 2 && name.charCodeAt(0) === 34 /* doubleQuote */ && name.charCodeAt(length - 1) === 34 /* doubleQuote */) {
return name.substring(1, length - 1);
}
;
return name;
}
function getSymbolScope(symbol) {
if (symbol.getFlags() && (4 /* Property */ | 8192 /* Method */)) {
var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 32 /* Private */) ? d : undefined; });
if (privateDeclaration) {
return ts.getAncestor(privateDeclaration, 184 /* ClassDeclaration */);
}
}
if (symbol.parent) {
return undefined;
}
var scope = undefined;
var declarations = symbol.getDeclarations();
if (declarations) {
for (var i = 0, n = declarations.length; i < n; i++) {
var container = getContainerNode(declarations[i]);
if (scope && scope !== container) {
return undefined;
}
if (container.kind === 193 /* SourceFile */ && !ts.isExternalModule(container)) {
return undefined;
}
scope = container;
}
}
return scope;
}
function getPossibleSymbolReferencePositions(sourceFile, symbolName, start, end) {
var positions = [];
if (!symbolName || !symbolName.length) {
return positions;
}
var text = sourceFile.text;
var sourceLength = text.length;
var symbolNameLength = symbolName.length;
var position = text.indexOf(symbolName, start);
while (position >= 0) {
cancellationToken.throwIfCancellationRequested();
if (position > end)
break;
var endPosition = position + symbolNameLength;
if ((position === 0 || !ts.isIdentifierPart(text.charCodeAt(position - 1), 2 /* Latest */)) && (endPosition === sourceLength || !ts.isIdentifierPart(text.charCodeAt(endPosition), 2 /* Latest */))) {
positions.push(position);
}
position = text.indexOf(symbolName, position + symbolNameLength + 1);
}
return positions;
}
function getLabelReferencesInNode(container, targetLabel) {
var result = [];
var sourceFile = container.getSourceFile();
var labelName = targetLabel.text;
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, labelName, container.getStart(), container.getEnd());
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var node = ts.getTouchingWord(sourceFile, position);
if (!node || node.getWidth() !== labelName.length) {
return;
}
if (node === targetLabel || (isJumpStatementTarget(node) && getTargetLabel(node, labelName) === targetLabel)) {
result.push(getReferenceEntryFromNode(node));
}
});
return result;
}
function isValidReferencePosition(node, searchSymbolName) {
if (node) {
switch (node.kind) {
case 63 /* Identifier */:
return node.getWidth() === searchSymbolName.length;
case 7 /* StringLiteral */:
if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) {
return node.getWidth() === searchSymbolName.length + 2;
}
break;
case 6 /* NumericLiteral */:
if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) {
return node.getWidth() === searchSymbolName.length;
}
break;
}
}
return false;
}
function getReferencesInNode(container, searchSymbol, searchText, searchLocation, searchMeaning, findInStrings, findInComments, result) {
var sourceFile = container.getSourceFile();
var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*</;
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, searchText, container.getStart(), container.getEnd());
if (possiblePositions.length) {
var searchSymbols = populateSearchSymbolSet(searchSymbol, searchLocation);
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var referenceLocation = ts.getTouchingPropertyName(sourceFile, position);
if (!isValidReferencePosition(referenceLocation, searchText)) {
if ((findInStrings && isInString(position)) || (findInComments && isInComment(position))) {
result.push({
fileName: sourceFile.filename,
textSpan: new TypeScript.TextSpan(position, searchText.length),
isWriteAccess: false
});
}
return;
}
if (!(getMeaningFromLocation(referenceLocation) & searchMeaning)) {
return;
}
var referenceSymbol = typeInfoResolver.getSymbolInfo(referenceLocation);
if (referenceSymbol && isRelatableToSearchSet(searchSymbols, referenceSymbol, referenceLocation)) {
result.push(getReferenceEntryFromNode(referenceLocation));
}
});
}
function isInString(position) {
var token = ts.getTokenAtPosition(sourceFile, position);
return token && token.kind === 7 /* StringLiteral */ && position > token.getStart();
}
function isInComment(position) {
var token = ts.getTokenAtPosition(sourceFile, position);
if (token && position < token.getStart()) {
var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos);
return ts.forEach(commentRanges, function (c) {
if (c.pos < position && position < c.end) {
var commentText = sourceFile.text.substring(c.pos, c.end);
if (!tripleSlashDirectivePrefixRegex.test(commentText)) {
return true;
}
}
});
}
return false;
}
}
function getReferencesForSuperKeyword(superKeyword) {
var searchSpaceNode = ts.getSuperContainer(superKeyword);
if (!searchSpaceNode) {
return undefined;
}
var staticFlag = 128 /* Static */;
switch (searchSpaceNode.kind) {
case 124 /* Property */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
staticFlag &= searchSpaceNode.flags;
searchSpaceNode = searchSpaceNode.parent;
break;
default:
return undefined;
}
var result = [];
var sourceFile = searchSpaceNode.getSourceFile();
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "super", searchSpaceNode.getStart(), searchSpaceNode.getEnd());
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var node = ts.getTouchingWord(sourceFile, position);
if (!node || node.kind !== 89 /* SuperKeyword */) {
return;
}
var container = ts.getSuperContainer(node);
if (container && (128 /* Static */ & container.flags) === staticFlag && container.parent.symbol === searchSpaceNode.symbol) {
result.push(getReferenceEntryFromNode(node));
}
});
return result;
}
function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles) {
var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, false);
var staticFlag = 128 /* Static */;
switch (searchSpaceNode.kind) {
case 124 /* Property */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
staticFlag &= searchSpaceNode.flags;
searchSpaceNode = searchSpaceNode.parent;
break;
case 193 /* SourceFile */:
if (ts.isExternalModule(searchSpaceNode)) {
return undefined;
}
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
break;
default:
return undefined;
}
var result = [];
if (searchSpaceNode.kind === 193 /* SourceFile */) {
ts.forEach(sourceFiles, function (sourceFile) {
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd());
getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, result);
});
}
else {
var sourceFile = searchSpaceNode.getSourceFile();
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", searchSpaceNode.getStart(), searchSpaceNode.getEnd());
getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, result);
}
return result;
function getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, result) {
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var node = ts.getTouchingWord(sourceFile, position);
if (!node || node.kind !== 91 /* ThisKeyword */) {
return;
}
var container = ts.getThisContainer(node, false);
switch (searchSpaceNode.kind) {
case 149 /* FunctionExpression */:
case 182 /* FunctionDeclaration */:
if (searchSpaceNode.symbol === container.symbol) {
result.push(getReferenceEntryFromNode(node));
}
break;
case 184 /* ClassDeclaration */:
if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 128 /* Static */) === staticFlag) {
result.push(getReferenceEntryFromNode(node));
}
break;
case 193 /* SourceFile */:
if (container.kind === 193 /* SourceFile */ && !ts.isExternalModule(container)) {
result.push(getReferenceEntryFromNode(node));
}
break;
}
});
}
}
function populateSearchSymbolSet(symbol, location) {
var result = [symbol];
if (isNameOfPropertyAssignment(location)) {
ts.forEach(getPropertySymbolsFromContextualType(location), function (contextualSymbol) {
result.push.apply(result, typeInfoResolver.getRootSymbols(contextualSymbol));
});
}
ts.forEach(typeInfoResolver.getRootSymbols(symbol), function (rootSymbol) {
if (rootSymbol !== symbol) {
result.push(rootSymbol);
}
if (rootSymbol.parent && rootSymbol.parent.flags & (32 /* Class */ | 64 /* Interface */)) {
getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result);
}
});
return result;
}
function getPropertySymbolsFromBaseTypes(symbol, propertyName, result) {
if (symbol && symbol.flags & (32 /* Class */ | 64 /* Interface */)) {
ts.forEach(symbol.getDeclarations(), function (declaration) {
if (declaration.kind === 184 /* ClassDeclaration */) {
getPropertySymbolFromTypeReference(declaration.baseType);
ts.forEach(declaration.implementedTypes, getPropertySymbolFromTypeReference);
}
else if (declaration.kind === 185 /* InterfaceDeclaration */) {
ts.forEach(declaration.baseTypes, getPropertySymbolFromTypeReference);
}
});
}
return;
function getPropertySymbolFromTypeReference(typeReference) {
if (typeReference) {
var type = typeInfoResolver.getTypeOfNode(typeReference);
if (type) {
var propertySymbol = typeInfoResolver.getPropertyOfType(type, propertyName);
if (propertySymbol) {
result.push(propertySymbol);
}
getPropertySymbolsFromBaseTypes(type.symbol, propertyName, result);
}
}
}
}
function isRelatableToSearchSet(searchSymbols, referenceSymbol, referenceLocation) {
if (searchSymbols.indexOf(referenceSymbol) >= 0) {
return true;
}
if (isNameOfPropertyAssignment(referenceLocation)) {
return ts.forEach(getPropertySymbolsFromContextualType(referenceLocation), function (contextualSymbol) {
return ts.forEach(typeInfoResolver.getRootSymbols(contextualSymbol), function (s) { return searchSymbols.indexOf(s) >= 0; });
});
}
return ts.forEach(typeInfoResolver.getRootSymbols(referenceSymbol), function (rootSymbol) {
if (searchSymbols.indexOf(rootSymbol) >= 0) {
return true;
}
if (rootSymbol.parent && rootSymbol.parent.flags & (32 /* Class */ | 64 /* Interface */)) {
var result = [];
getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result);
return ts.forEach(result, function (s) { return searchSymbols.indexOf(s) >= 0; });
}
return false;
});
}
function getPropertySymbolsFromContextualType(node) {
if (isNameOfPropertyAssignment(node)) {
var objectLiteral = node.parent.parent;
var contextualType = typeInfoResolver.getContextualType(objectLiteral);
var name = node.text;
if (contextualType) {
if (contextualType.flags & 16384 /* Union */) {
var unionProperty = contextualType.getProperty(name);
if (unionProperty) {
return [unionProperty];
}
else {
var result = [];
ts.forEach(contextualType.types, function (t) {
var symbol = t.getProperty(name);
if (symbol) {
result.push(symbol);
}
});
return result;
}
}
else {
var symbol = contextualType.getProperty(name);
if (symbol) {
return [symbol];
}
}
}
}
return undefined;
}
function getIntersectingMeaningFromDeclarations(meaning, declarations) {
if (declarations) {
do {
var lastIterationMeaning = meaning;
for (var i = 0, n = declarations.length; i < n; i++) {
var declarationMeaning = getMeaningFromDeclaration(declarations[i]);
if (declarationMeaning & meaning) {
meaning |= declarationMeaning;
}
}
} while (meaning !== lastIterationMeaning);
}
return meaning;
}
}
function getReferenceEntryFromNode(node) {
var start = node.getStart();
var end = node.getEnd();
if (node.kind === 7 /* StringLiteral */) {
start += 1;
end -= 1;
}
return {
fileName: node.getSourceFile().filename,
textSpan: TypeScript.TextSpan.fromBounds(start, end),
isWriteAccess: isWriteAccess(node)
};
}
function isWriteAccess(node) {
if (node.kind === 63 /* Identifier */ && ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
return true;
}
var parent = node.parent;
if (parent) {
if (parent.kind === 152 /* PostfixOperator */ || parent.kind === 151 /* PrefixOperator */) {
return true;
}
else if (parent.kind === 153 /* BinaryExpression */ && parent.left === node) {
var operator = parent.operator;
return 51 /* FirstAssignment */ <= operator && operator <= 62 /* LastAssignment */;
}
}
return false;
}
function getNavigateToItems(searchValue) {
synchronizeHostData();
var terms = searchValue.split(" ");
var searchTerms = ts.map(terms, function (t) { return ({ caseSensitive: hasAnyUpperCaseCharacter(t), term: t }); });
var items = [];
ts.forEach(program.getSourceFiles(), function (sourceFile) {
cancellationToken.throwIfCancellationRequested();
var filename = sourceFile.filename;
var declarations = sourceFile.getNamedDeclarations();
for (var i = 0, n = declarations.length; i < n; i++) {
var declaration = declarations[i];
var name = declaration.name.text;
var matchKind = getMatchKind(searchTerms, name);
if (matchKind !== 0 /* none */) {
var container = getContainerNode(declaration);
items.push({
name: name,
kind: getNodeKind(declaration),
kindModifiers: getNodeModifiers(declaration),
matchKind: MatchKind[matchKind],
fileName: filename,
textSpan: TypeScript.TextSpan.fromBounds(declaration.getStart(), declaration.getEnd()),
containerName: container.name ? container.name.text : "",
containerKind: container.name ? getNodeKind(container) : ""
});
}
}
});
return items;
function hasAnyUpperCaseCharacter(s) {
for (var i = 0, n = s.length; i < n; i++) {
var c = s.charCodeAt(i);
if ((65 /* A */ <= c && c <= 90 /* Z */) || (c >= 127 /* maxAsciiCharacter */ && s.charAt(i).toLocaleLowerCase() !== s.charAt(i))) {
return true;
}
}
return false;
}
function getMatchKind(searchTerms, name) {
var matchKind = 0 /* none */;
if (name) {
for (var j = 0, n = searchTerms.length; j < n; j++) {
var searchTerm = searchTerms[j];
var nameToSearch = searchTerm.caseSensitive ? name : name.toLocaleLowerCase();
var index = nameToSearch.indexOf(searchTerm.term);
if (index < 0) {
return 0 /* none */;
}
var termKind = 2 /* substring */;
if (index === 0) {
termKind = name.length === searchTerm.term.length ? 1 /* exact */ : 3 /* prefix */;
}
if (matchKind === 0 /* none */ || termKind < matchKind) {
matchKind = termKind;
}
}
}
return matchKind;
}
}
function containErrors(diagnostics) {
return ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1 /* Error */; });
}
function getEmitOutput(filename) {
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
var compilerOptions = program.getCompilerOptions();
var targetSourceFile = program.getSourceFile(filename);
var shouldEmitToOwnFile = ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions);
var emitOutput = {
outputFiles: [],
emitOutputStatus: undefined
};
function getEmitOutputWriter(filename, data, writeByteOrderMark) {
emitOutput.outputFiles.push({
name: filename,
writeByteOrderMark: writeByteOrderMark,
text: data
});
}
writer = getEmitOutputWriter;
var containSyntacticErrors = false;
if (shouldEmitToOwnFile) {
containSyntacticErrors = containErrors(program.getDiagnostics(targetSourceFile));
}
else {
containSyntacticErrors = ts.forEach(program.getSourceFiles(), function (sourceFile) {
if (!ts.isExternalModuleOrDeclarationFile(sourceFile)) {
return containErrors(program.getDiagnostics(sourceFile));
}
return false;
});
}
if (containSyntacticErrors) {
emitOutput.emitOutputStatus = 1 /* AllOutputGenerationSkipped */;
writer = undefined;
return emitOutput;
}
var emitFilesResult = getFullTypeCheckChecker().emitFiles(targetSourceFile);
emitOutput.emitOutputStatus = emitFilesResult.emitResultStatus;
writer = undefined;
return emitOutput;
}
function getMeaningFromDeclaration(node) {
switch (node.kind) {
case 123 /* Parameter */:
case 181 /* VariableDeclaration */:
case 124 /* Property */:
case 141 /* PropertyAssignment */:
case 192 /* EnumMember */:
case 125 /* Method */:
case 126 /* Constructor */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 182 /* FunctionDeclaration */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
case 178 /* CatchBlock */:
return 1 /* Value */;
case 122 /* TypeParameter */:
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
case 134 /* TypeLiteral */:
return 2 /* Type */;
case 184 /* ClassDeclaration */:
case 187 /* EnumDeclaration */:
return 1 /* Value */ | 2 /* Type */;
case 188 /* ModuleDeclaration */:
if (node.name.kind === 7 /* StringLiteral */) {
return 4 /* Namespace */ | 1 /* Value */;
}
else if (ts.getModuleInstanceState(node) === 1 /* Instantiated */) {
return 4 /* Namespace */ | 1 /* Value */;
}
else {
return 4 /* Namespace */;
}
break;
case 190 /* ImportDeclaration */:
return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */;
}
ts.Debug.fail("Unknown declaration type");
}
function isTypeReference(node) {
if (isRightSideOfQualifiedName(node)) {
node = node.parent;
}
return node.parent.kind === 132 /* TypeReference */;
}
function isNamespaceReference(node) {
var root = node;
var isLastClause = true;
if (root.parent.kind === 121 /* QualifiedName */) {
while (root.parent && root.parent.kind === 121 /* QualifiedName */)
root = root.parent;
isLastClause = root.right === node;
}
return root.parent.kind === 132 /* TypeReference */ && !isLastClause;
}
function isInRightSideOfImport(node) {
while (node.parent.kind === 121 /* QualifiedName */) {
node = node.parent;
}
return node.parent.kind === 190 /* ImportDeclaration */ && node.parent.entityName === node;
}
function getMeaningFromRightHandSideOfImport(node) {
ts.Debug.assert(node.kind === 63 /* Identifier */);
if (node.parent.kind === 121 /* QualifiedName */ && node.parent.right === node && node.parent.parent.kind === 190 /* ImportDeclaration */) {
return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */;
}
return 4 /* Namespace */;
}
function getMeaningFromLocation(node) {
if (node.parent.kind === 191 /* ExportAssignment */) {
return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */;
}
else if (isInRightSideOfImport(node)) {
return getMeaningFromRightHandSideOfImport(node);
}
else if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
return getMeaningFromDeclaration(node.parent);
}
else if (isTypeReference(node)) {
return 2 /* Type */;
}
else if (isNamespaceReference(node)) {
return 4 /* Namespace */;
}
else {
return 1 /* Value */;
}
}
function getSignatureHelpItems(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getSourceFile(fileName);
return ts.SignatureHelp.getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken);
}
function getSignatureAtPosition(filename, position) {
var signatureHelpItems = getSignatureHelpItems(filename, position);
if (!signatureHelpItems) {
return undefined;
}
var currentArgumentState = { argumentIndex: signatureHelpItems.argumentIndex, argumentCount: signatureHelpItems.argumentCount };
var formalSignatures = [];
ts.forEach(signatureHelpItems.items, function (signature) {
var signatureInfoString = displayPartsToString(signature.prefixDisplayParts);
var parameters = [];
if (signature.parameters) {
for (var i = 0, n = signature.parameters.length; i < n; i++) {
var parameter = signature.parameters[i];
if (i) {
signatureInfoString += displayPartsToString(signature.separatorDisplayParts);
}
var start = signatureInfoString.length;
signatureInfoString += displayPartsToString(parameter.displayParts);
var end = signatureInfoString.length;
parameters.push({
name: parameter.name,
isVariable: i === n - 1 && signature.isVariadic,
docComment: displayPartsToString(parameter.documentation),
minChar: start,
limChar: end
});
}
}
signatureInfoString += displayPartsToString(signature.suffixDisplayParts);
formalSignatures.push({
signatureInfo: signatureInfoString,
docComment: displayPartsToString(signature.documentation),
parameters: parameters,
typeParameters: []
});
});
var actualSignature = {
parameterMinChar: signatureHelpItems.applicableSpan.start(),
parameterLimChar: signatureHelpItems.applicableSpan.end(),
currentParameterIsTypeParameter: false,
currentParameter: currentArgumentState.argumentIndex
};
return {
actual: actualSignature,
formal: formalSignatures,
activeFormal: 0
};
}
function getSyntaxTree(filename) {
filename = ts.normalizeSlashes(filename);
return syntaxTreeCache.getCurrentFileSyntaxTree(filename);
}
function getCurrentSourceFile(filename) {
filename = ts.normalizeSlashes(filename);
var currentSourceFile = syntaxTreeCache.getCurrentSourceFile(filename);
return currentSourceFile;
}
function getNameOrDottedNameSpan(filename, startPos, endPos) {
filename = ts.normalizeSlashes(filename);
var node = ts.getTouchingPropertyName(getCurrentSourceFile(filename), startPos);
if (!node) {
return;
}
switch (node.kind) {
case 142 /* PropertyAccess */:
case 121 /* QualifiedName */:
case 7 /* StringLiteral */:
case 78 /* FalseKeyword */:
case 93 /* TrueKeyword */:
case 87 /* NullKeyword */:
case 89 /* SuperKeyword */:
case 91 /* ThisKeyword */:
case 63 /* Identifier */:
break;
default:
return;
}
var nodeForStartPos = node;
while (true) {
if (isRightSideOfPropertyAccess(nodeForStartPos) || isRightSideOfQualifiedName(nodeForStartPos)) {
nodeForStartPos = nodeForStartPos.parent;
}
else if (isNameOfModuleDeclaration(nodeForStartPos)) {
if (nodeForStartPos.parent.parent.kind === 188 /* ModuleDeclaration */ && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) {
nodeForStartPos = nodeForStartPos.parent.parent.name;
}
else {
break;
}
}
else {
break;
}
}
return TypeScript.TextSpan.fromBounds(nodeForStartPos.getStart(), node.getEnd());
}
function getBreakpointStatementAtPosition(filename, position) {
filename = ts.normalizeSlashes(filename);
return ts.BreakpointResolver.spanInSourceFileAtLocation(getCurrentSourceFile(filename), position);
}
function getNavigationBarItems(filename) {
filename = ts.normalizeSlashes(filename);
return ts.NavigationBar.getNavigationBarItems(getCurrentSourceFile(filename));
}
function getSemanticClassifications(fileName, span) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getSourceFile(fileName);
var result = [];
processNode(sourceFile);
return result;
function classifySymbol(symbol, meaningAtPosition) {
var flags = symbol.getFlags();
if (flags & 32 /* Class */) {
return ClassificationTypeNames.className;
}
else if (flags & 384 /* Enum */) {
return ClassificationTypeNames.enumName;
}
else if (meaningAtPosition & 2 /* Type */) {
if (flags & 64 /* Interface */) {
return ClassificationTypeNames.interfaceName;
}
else if (flags & 1048576 /* TypeParameter */) {
return ClassificationTypeNames.typeParameterName;
}
}
else if (flags & 1536 /* Module */) {
if (meaningAtPosition & 4 /* Namespace */ || (meaningAtPosition & 1 /* Value */ && hasValueSideModule(symbol))) {
return ClassificationTypeNames.moduleName;
}
}
return undefined;
function hasValueSideModule(symbol) {
return ts.forEach(symbol.declarations, function (declaration) {
return declaration.kind === 188 /* ModuleDeclaration */ && ts.getModuleInstanceState(declaration) == 1 /* Instantiated */;
});
}
}
function processNode(node) {
if (node && span.intersectsWith(node.getStart(), node.getWidth())) {
if (node.kind === 63 /* Identifier */ && node.getWidth() > 0) {
var symbol = typeInfoResolver.getSymbolInfo(node);
if (symbol) {
var type = classifySymbol(symbol, getMeaningFromLocation(node));
if (type) {
result.push({
textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()),
classificationType: type
});
}
}
}
ts.forEachChild(node, processNode);
}
}
}
function getSyntacticClassifications(fileName, span) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
var result = [];
processElement(sourceFile);
return result;
function classifyComment(comment) {
var width = comment.end - comment.pos;
if (span.intersectsWith(comment.pos, width)) {
result.push({
textSpan: new TypeScript.TextSpan(comment.pos, width),
classificationType: ClassificationTypeNames.comment
});
}
}
function classifyToken(token) {
ts.forEach(ts.getLeadingCommentRanges(sourceFile.text, token.getFullStart()), classifyComment);
if (token.getWidth() > 0) {
var type = classifyTokenType(token);
if (type) {
result.push({
textSpan: new TypeScript.TextSpan(token.getStart(), token.getWidth()),
classificationType: type
});
}
}
ts.forEach(ts.getTrailingCommentRanges(sourceFile.text, token.getEnd()), classifyComment);
}
function classifyTokenType(token) {
var tokenKind = token.kind;
if (ts.isKeyword(tokenKind)) {
return ClassificationTypeNames.keyword;
}
if (tokenKind === 23 /* LessThanToken */ || tokenKind === 24 /* GreaterThanToken */) {
if (ts.getTypeArgumentOrTypeParameterList(token.parent)) {
return ClassificationTypeNames.punctuation;
}
}
if (ts.isPunctuation(token)) {
if (token.parent.kind === 153 /* BinaryExpression */ || token.parent.kind === 181 /* VariableDeclaration */ || token.parent.kind === 151 /* PrefixOperator */ || token.parent.kind === 152 /* PostfixOperator */ || token.parent.kind === 154 /* ConditionalExpression */) {
return ClassificationTypeNames.operator;
}
else {
return ClassificationTypeNames.punctuation;
}
}
else if (tokenKind === 6 /* NumericLiteral */) {
return ClassificationTypeNames.numericLiteral;
}
else if (tokenKind === 7 /* StringLiteral */) {
return ClassificationTypeNames.stringLiteral;
}
else if (tokenKind === 8 /* RegularExpressionLiteral */) {
return ClassificationTypeNames.stringLiteral;
}
else if (ts.isTemplateLiteralKind(tokenKind)) {
return ClassificationTypeNames.stringLiteral;
}
else if (tokenKind === 63 /* Identifier */) {
switch (token.parent.kind) {
case 184 /* ClassDeclaration */:
if (token.parent.name === token) {
return ClassificationTypeNames.className;
}
return;
case 122 /* TypeParameter */:
if (token.parent.name === token) {
return ClassificationTypeNames.typeParameterName;
}
return;
case 185 /* InterfaceDeclaration */:
if (token.parent.name === token) {
return ClassificationTypeNames.interfaceName;
}
return;
case 187 /* EnumDeclaration */:
if (token.parent.name === token) {
return ClassificationTypeNames.enumName;
}
return;
case 188 /* ModuleDeclaration */:
if (token.parent.name === token) {
return ClassificationTypeNames.moduleName;
}
return;
default:
return ClassificationTypeNames.text;
}
}
}
function processElement(element) {
if (span.intersectsWith(element.getFullStart(), element.getFullWidth())) {
var children = element.getChildren();
for (var i = 0, n = children.length; i < n; i++) {
var child = children[i];
if (ts.isToken(child)) {
classifyToken(child);
}
else {
processElement(child);
}
}
}
}
}
function getOutliningSpans(filename) {
filename = ts.normalizeSlashes(filename);
var sourceFile = getCurrentSourceFile(filename);
return ts.OutliningElementsCollector.collectElements(sourceFile);
}
function getBraceMatchingAtPosition(filename, position) {
var sourceFile = getCurrentSourceFile(filename);
var result = [];
var token = ts.getTouchingToken(sourceFile, position);
if (token.getStart(sourceFile) === position) {
var matchKind = getMatchingTokenKind(token);
if (matchKind) {
var parentElement = token.parent;
var childNodes = parentElement.getChildren(sourceFile);
for (var i = 0, n = childNodes.length; i < n; i++) {
var current = childNodes[i];
if (current.kind === matchKind) {
var range1 = new TypeScript.TextSpan(token.getStart(sourceFile), token.getWidth(sourceFile));
var range2 = new TypeScript.TextSpan(current.getStart(sourceFile), current.getWidth(sourceFile));
if (range1.start() < range2.start()) {
result.push(range1, range2);
}
else {
result.push(range2, range1);
}
break;
}
}
}
}
return result;
function getMatchingTokenKind(token) {
switch (token.kind) {
case 13 /* OpenBraceToken */: return 14 /* CloseBraceToken */;
case 15 /* OpenParenToken */: return 16 /* CloseParenToken */;
case 17 /* OpenBracketToken */: return 18 /* CloseBracketToken */;
case 23 /* LessThanToken */: return 24 /* GreaterThanToken */;
case 14 /* CloseBraceToken */: return 13 /* OpenBraceToken */;
case 16 /* CloseParenToken */: return 15 /* OpenParenToken */;
case 18 /* CloseBracketToken */: return 17 /* OpenBracketToken */;
case 24 /* GreaterThanToken */: return 23 /* LessThanToken */;
}
return undefined;
}
}
function getIndentationAtPosition(filename, position, editorOptions) {
filename = ts.normalizeSlashes(filename);
var start = new Date().getTime();
var sourceFile = getCurrentSourceFile(filename);
host.log("getIndentationAtPosition: getCurrentSourceFile: " + (new Date().getTime() - start));
var start = new Date().getTime();
var options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter);
var result = ts.formatting.SmartIndenter.getIndentation(position, sourceFile, options);
host.log("getIndentationAtPosition: computeIndentation : " + (new Date().getTime() - start));
return result;
}
function getFormattingManager(filename, options) {
if (formattingRulesProvider == null) {
formattingRulesProvider = new TypeScript.Services.Formatting.RulesProvider(host);
}
formattingRulesProvider.ensureUpToDate(options);
var syntaxTree = getSyntaxTree(filename);
var scriptSnapshot = syntaxTreeCache.getCurrentScriptSnapshot(filename);
var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot);
var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText);
var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, formattingRulesProvider, options);
return manager;
}
function getFormattingEditsForRange(fileName, start, end, options) {
fileName = ts.normalizeSlashes(fileName);
var manager = getFormattingManager(fileName, options);
return manager.formatSelection(start, end);
}
function getFormattingEditsForDocument(fileName, options) {
fileName = ts.normalizeSlashes(fileName);
var manager = getFormattingManager(fileName, options);
return manager.formatDocument();
}
function getFormattingEditsAfterKeystroke(fileName, position, key, options) {
fileName = ts.normalizeSlashes(fileName);
var manager = getFormattingManager(fileName, options);
if (key === "}") {
return manager.formatOnClosingCurlyBrace(position);
}
else if (key === ";") {
return manager.formatOnSemicolon(position);
}
else if (key === "\n") {
return manager.formatOnEnter(position);
}
return [];
}
function getTodoComments(filename, descriptors) {
synchronizeHostData();
filename = ts.normalizeSlashes(filename);
var sourceFile = getSourceFile(filename);
cancellationToken.throwIfCancellationRequested();
var fileContents = sourceFile.text;
cancellationToken.throwIfCancellationRequested();
var result = [];
if (descriptors.length > 0) {
var regExp = getTodoCommentsRegExp();
var matchArray;
while (matchArray = regExp.exec(fileContents)) {
cancellationToken.throwIfCancellationRequested();
var firstDescriptorCaptureIndex = 3;
ts.Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex);
var preamble = matchArray[1];
var matchPosition = matchArray.index + preamble.length;
var token = ts.getTokenAtPosition(sourceFile, matchPosition);
if (!isInsideComment(sourceFile, token, matchPosition)) {
continue;
}
var descriptor = undefined;
for (var i = 0, n = descriptors.length; i < n; i++) {
if (matchArray[i + firstDescriptorCaptureIndex]) {
descriptor = descriptors[i];
}
}
ts.Debug.assert(descriptor !== undefined);
if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) {
continue;
}
var message = matchArray[2];
result.push({
descriptor: descriptor,
message: message,
position: matchPosition
});
}
}
return result;
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function getTodoCommentsRegExp() {
var singleLineCommentStart = /(?:\/\/+\s*)/.source;
var multiLineCommentStart = /(?:\/\*+\s*)/.source;
var anyNumberOfSpacesAndAsterixesAtStartOfLine = /(?:^(?:\s|\*)*)/.source;
var preamble = "(" + anyNumberOfSpacesAndAsterixesAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")";
var literals = "(?:" + ts.map(descriptors, function (d) { return "(" + escapeRegExp(d.text) + ")"; }).join("|") + ")";
var endOfLineOrEndOfComment = /(?:$|\*\/)/.source;
var messageRemainder = /(?:.*?)/.source;
var messagePortion = "(" + literals + messageRemainder + ")";
var regExpString = preamble + messagePortion + endOfLineOrEndOfComment;
return new RegExp(regExpString, "gim");
}
function getContainingComment(comments, position) {
if (comments) {
for (var i = 0, n = comments.length; i < n; i++) {
var comment = comments[i];
if (comment.pos <= position && position < comment.end) {
return comment;
}
}
}
return undefined;
}
function isLetterOrDigit(char) {
return (char >= 97 /* a */ && char <= 122 /* z */) || (char >= 65 /* A */ && char <= 90 /* Z */) || (char >= 48 /* _0 */ && char <= 57 /* _9 */);
}
}
function getRenameInfo(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getSourceFile(fileName);
var node = ts.getTouchingWord(sourceFile, position);
if (node && node.kind === 63 /* Identifier */) {
var symbol = typeInfoResolver.getSymbolInfo(node);
if (symbol && symbol.getDeclarations() && symbol.getDeclarations().length > 0) {
var kind = getSymbolKind(symbol, typeInfoResolver);
if (kind) {
return getRenameInfo(symbol.name, typeInfoResolver.getFullyQualifiedName(symbol), kind, getSymbolModifiers(symbol), new TypeScript.TextSpan(node.getStart(), node.getWidth()));
}
}
}
return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key));
function getRenameInfoError(localizedErrorMessage) {
return {
canRename: false,
localizedErrorMessage: ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key),
displayName: undefined,
fullDisplayName: undefined,
kind: undefined,
kindModifiers: undefined,
triggerSpan: undefined
};
}
function getRenameInfo(displayName, fullDisplayName, kind, kindModifiers, triggerSpan) {
return {
canRename: true,
localizedErrorMessage: undefined,
displayName: displayName,
fullDisplayName: fullDisplayName,
kind: kind,
kindModifiers: kindModifiers,
triggerSpan: triggerSpan
};
}
}
return {
dispose: dispose,
cleanupSemanticCache: cleanupSemanticCache,
getSyntacticDiagnostics: getSyntacticDiagnostics,
getSemanticDiagnostics: getSemanticDiagnostics,
getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics,
getSyntacticClassifications: getSyntacticClassifications,
getSemanticClassifications: getSemanticClassifications,
getCompletionsAtPosition: getCompletionsAtPosition,
getCompletionEntryDetails: getCompletionEntryDetails,
getSignatureHelpItems: getSignatureHelpItems,
getQuickInfoAtPosition: getQuickInfoAtPosition,
getDefinitionAtPosition: getDefinitionAtPosition,
getReferencesAtPosition: getReferencesAtPosition,
getOccurrencesAtPosition: getOccurrencesAtPosition,
getImplementorsAtPosition: function (filename, position) { return []; },
getNameOrDottedNameSpan: getNameOrDottedNameSpan,
getBreakpointStatementAtPosition: getBreakpointStatementAtPosition,
getNavigateToItems: getNavigateToItems,
getRenameInfo: getRenameInfo,
findRenameLocations: findRenameLocations,
getNavigationBarItems: getNavigationBarItems,
getOutliningSpans: getOutliningSpans,
getTodoComments: getTodoComments,
getBraceMatchingAtPosition: getBraceMatchingAtPosition,
getIndentationAtPosition: getIndentationAtPosition,
getFormattingEditsForRange: getFormattingEditsForRange,
getFormattingEditsForDocument: getFormattingEditsForDocument,
getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke,
getEmitOutput: getEmitOutput,
getSignatureAtPosition: getSignatureAtPosition
};
}
ts.createLanguageService = createLanguageService;
function createClassifier(host) {
var scanner = ts.createScanner(2 /* Latest */, false);
var noRegexTable = [];
noRegexTable[63 /* Identifier */] = true;
noRegexTable[7 /* StringLiteral */] = true;
noRegexTable[6 /* NumericLiteral */] = true;
noRegexTable[8 /* RegularExpressionLiteral */] = true;
noRegexTable[91 /* ThisKeyword */] = true;
noRegexTable[37 /* PlusPlusToken */] = true;
noRegexTable[38 /* MinusMinusToken */] = true;
noRegexTable[16 /* CloseParenToken */] = true;
noRegexTable[18 /* CloseBracketToken */] = true;
noRegexTable[14 /* CloseBraceToken */] = true;
noRegexTable[93 /* TrueKeyword */] = true;
noRegexTable[78 /* FalseKeyword */] = true;
function isAccessibilityModifier(kind) {
switch (kind) {
case 106 /* PublicKeyword */:
case 104 /* PrivateKeyword */:
case 105 /* ProtectedKeyword */:
return true;
}
return false;
}
function canFollow(keyword1, keyword2) {
if (isAccessibilityModifier(keyword1)) {
if (keyword2 === 113 /* GetKeyword */ || keyword2 === 117 /* SetKeyword */ || keyword2 === 111 /* ConstructorKeyword */ || keyword2 === 107 /* StaticKeyword */) {
return true;
}
return false;
}
return true;
}
function getClassificationsForLine(text, lexState) {
var offset = 0;
var token = 0 /* Unknown */;
var lastNonTriviaToken = 0 /* Unknown */;
switch (lexState) {
case 3 /* InDoubleQuoteStringLiteral */:
text = '"\\\n' + text;
offset = 3;
break;
case 2 /* InSingleQuoteStringLiteral */:
text = "'\\\n" + text;
offset = 3;
break;
case 1 /* InMultiLineCommentTrivia */:
text = "/*\n" + text;
offset = 3;
break;
}
scanner.setText(text);
var result = {
finalLexState: 0 /* Start */,
entries: []
};
var angleBracketStack = 0;
do {
token = scanner.scan();
if (!ts.isTrivia(token)) {
if ((token === 35 /* SlashToken */ || token === 55 /* SlashEqualsToken */) && !noRegexTable[lastNonTriviaToken]) {
if (scanner.reScanSlashToken() === 8 /* RegularExpressionLiteral */) {
token = 8 /* RegularExpressionLiteral */;
}
}
else if (lastNonTriviaToken === 19 /* DotToken */ && isKeyword(token)) {
token = 63 /* Identifier */;
}
else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) {
token = 63 /* Identifier */;
}
else if (lastNonTriviaToken === 63 /* Identifier */ && token === 23 /* LessThanToken */) {
angleBracketStack++;
}
else if (token === 24 /* GreaterThanToken */ && angleBracketStack > 0) {
angleBracketStack--;
}
else if (token === 109 /* AnyKeyword */ || token === 118 /* StringKeyword */ || token === 116 /* NumberKeyword */ || token === 110 /* BooleanKeyword */) {
if (angleBracketStack > 0) {
token = 63 /* Identifier */;
}
}
lastNonTriviaToken = token;
}
processToken();
} while (token !== 1 /* EndOfFileToken */);
return result;
function processToken() {
var start = scanner.getTokenPos();
var end = scanner.getTextPos();
addResult(end - start, classFromKind(token));
if (end >= text.length) {
if (token === 7 /* StringLiteral */) {
var tokenText = scanner.getTokenText();
if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) {
var quoteChar = tokenText.charCodeAt(0);
result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */;
}
}
else if (token === 3 /* MultiLineCommentTrivia */) {
var tokenText = scanner.getTokenText();
if (!(tokenText.length > 3 && tokenText.charCodeAt(tokenText.length - 2) === 42 /* asterisk */ && tokenText.charCodeAt(tokenText.length - 1) === 47 /* slash */)) {
result.finalLexState = 1 /* InMultiLineCommentTrivia */;
}
}
}
}
function addResult(length, classification) {
if (length > 0) {
if (result.entries.length === 0) {
length -= offset;
}
result.entries.push({ length: length, classification: classification });
}
}
}
function isBinaryExpressionOperatorToken(token) {
switch (token) {
case 34 /* AsteriskToken */:
case 35 /* SlashToken */:
case 36 /* PercentToken */:
case 32 /* PlusToken */:
case 33 /* MinusToken */:
case 39 /* LessThanLessThanToken */:
case 40 /* GreaterThanGreaterThanToken */:
case 41 /* GreaterThanGreaterThanGreaterThanToken */:
case 23 /* LessThanToken */:
case 24 /* GreaterThanToken */:
case 25 /* LessThanEqualsToken */:
case 26 /* GreaterThanEqualsToken */:
case 85 /* InstanceOfKeyword */:
case 84 /* InKeyword */:
case 27 /* EqualsEqualsToken */:
case 28 /* ExclamationEqualsToken */:
case 29 /* EqualsEqualsEqualsToken */:
case 30 /* ExclamationEqualsEqualsToken */:
case 42 /* AmpersandToken */:
case 44 /* CaretToken */:
case 43 /* BarToken */:
case 47 /* AmpersandAmpersandToken */:
case 48 /* BarBarToken */:
case 61 /* BarEqualsToken */:
case 60 /* AmpersandEqualsToken */:
case 62 /* CaretEqualsToken */:
case 57 /* LessThanLessThanEqualsToken */:
case 58 /* GreaterThanGreaterThanEqualsToken */:
case 59 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
case 52 /* PlusEqualsToken */:
case 53 /* MinusEqualsToken */:
case 54 /* AsteriskEqualsToken */:
case 55 /* SlashEqualsToken */:
case 56 /* PercentEqualsToken */:
case 51 /* EqualsToken */:
case 22 /* CommaToken */:
return true;
default: return false;
}
}
function isPrefixUnaryExpressionOperatorToken(token) {
switch (token) {
case 32 /* PlusToken */:
case 33 /* MinusToken */:
case 46 /* TildeToken */:
case 45 /* ExclamationToken */:
case 37 /* PlusPlusToken */:
case 38 /* MinusMinusToken */:
return true;
default:
return false;
}
}
function isKeyword(token) {
return token >= 64 /* FirstKeyword */ && token <= 119 /* LastKeyword */;
}
function classFromKind(token) {
if (isKeyword(token)) {
return 1 /* Keyword */;
}
else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
return 2 /* Operator */;
}
else if (token >= 13 /* FirstPunctuation */ && token <= 62 /* LastPunctuation */) {
return 0 /* Punctuation */;
}
switch (token) {
case 6 /* NumericLiteral */:
return 6 /* NumberLiteral */;
case 7 /* StringLiteral */:
return 7 /* StringLiteral */;
case 8 /* RegularExpressionLiteral */:
return 8 /* RegExpLiteral */;
case 3 /* MultiLineCommentTrivia */:
case 2 /* SingleLineCommentTrivia */:
return 3 /* Comment */;
case 5 /* WhitespaceTrivia */:
return 4 /* Whitespace */;
case 63 /* Identifier */:
default:
return 5 /* Identifier */;
}
}
return {
getClassificationsForLine: getClassificationsForLine
};
}
ts.createClassifier = createClassifier;
function initializeServices() {
ts.objectAllocator = {
getNodeConstructor: function (kind) {
function Node() {
}
var proto = kind === 193 /* SourceFile */ ? new SourceFileObject() : new NodeObject();
proto.kind = kind;
proto.pos = 0;
proto.end = 0;
proto.flags = 0;
proto.parent = undefined;
Node.prototype = proto;
return Node;
},
getSymbolConstructor: function () { return SymbolObject; },
getTypeConstructor: function () { return TypeObject; },
getSignatureConstructor: function () { return SignatureObject; }
};
}
initializeServices();
})(ts || (ts = {}));
var ts;
(function (ts) {
var BreakpointResolver;
(function (BreakpointResolver) {
function spanInSourceFileAtLocation(sourceFile, position) {
if (sourceFile.flags & 1024 /* DeclarationFile */) {
return undefined;
}
var tokenAtLocation = ts.getTokenAtPosition(sourceFile, position);
var lineOfPosition = sourceFile.getLineAndCharacterFromPosition(position).line;
if (sourceFile.getLineAndCharacterFromPosition(tokenAtLocation.getStart()).line > lineOfPosition) {
tokenAtLocation = ts.findPrecedingToken(tokenAtLocation.pos, sourceFile);
if (!tokenAtLocation || sourceFile.getLineAndCharacterFromPosition(tokenAtLocation.getEnd()).line !== lineOfPosition) {
return undefined;
}
}
if (ts.isInAmbientContext(tokenAtLocation)) {
return undefined;
}
return spanInNode(tokenAtLocation);
function textSpan(startNode, endNode) {
return TypeScript.TextSpan.fromBounds(startNode.getStart(), (endNode || startNode).getEnd());
}
function spanInNodeIfStartsOnSameLine(node, otherwiseOnNode) {
if (node && lineOfPosition === sourceFile.getLineAndCharacterFromPosition(node.getStart()).line) {
return spanInNode(node);
}
return spanInNode(otherwiseOnNode);
}
function spanInPreviousNode(node) {
return spanInNode(ts.findPrecedingToken(node.pos, sourceFile));
}
function spanInNextNode(node) {
return spanInNode(ts.findNextToken(node, node.parent));
}
function spanInNode(node) {
if (node) {
if (ts.isExpression(node)) {
if (node.parent.kind === 163 /* DoStatement */) {
return spanInPreviousNode(node);
}
if (node.parent.kind === 165 /* ForStatement */) {
return textSpan(node);
}
if (node.parent.kind === 153 /* BinaryExpression */ && node.parent.operator === 22 /* CommaToken */) {
return textSpan(node);
}
if (node.parent.kind == 150 /* ArrowFunction */ && node.parent.body == node) {
return textSpan(node);
}
}
switch (node.kind) {
case 159 /* VariableStatement */:
return spanInVariableDeclaration(node.declarations[0]);
case 181 /* VariableDeclaration */:
case 124 /* Property */:
return spanInVariableDeclaration(node);
case 123 /* Parameter */:
return spanInParameterDeclaration(node);
case 182 /* FunctionDeclaration */:
case 125 /* Method */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 126 /* Constructor */:
case 149 /* FunctionExpression */:
case 150 /* ArrowFunction */:
return spanInFunctionDeclaration(node);
case 183 /* FunctionBlock */:
return spanInFunctionBlock(node);
case 158 /* Block */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
case 189 /* ModuleBlock */:
return spanInBlock(node);
case 161 /* ExpressionStatement */:
return textSpan(node.expression);
case 169 /* ReturnStatement */:
return textSpan(node.getChildAt(0), node.expression);
case 164 /* WhileStatement */:
return textSpan(node, ts.findNextToken(node.expression, node));
case 163 /* DoStatement */:
return spanInNode(node.statement);
case 180 /* DebuggerStatement */:
return textSpan(node.getChildAt(0));
case 162 /* IfStatement */:
return textSpan(node, ts.findNextToken(node.expression, node));
case 174 /* LabeledStatement */:
return spanInNode(node.statement);
case 168 /* BreakStatement */:
case 167 /* ContinueStatement */:
return textSpan(node.getChildAt(0), node.label);
case 165 /* ForStatement */:
return spanInForStatement(node);
case 166 /* ForInStatement */:
return textSpan(node, ts.findNextToken(node.expression, node));
case 171 /* SwitchStatement */:
return textSpan(node, ts.findNextToken(node.expression, node));
case 172 /* CaseClause */:
case 173 /* DefaultClause */:
return spanInNode(node.statements[0]);
case 176 /* TryStatement */:
return spanInBlock(node.tryBlock);
case 175 /* ThrowStatement */:
return textSpan(node, node.expression);
case 191 /* ExportAssignment */:
return textSpan(node, node.exportName);
case 190 /* ImportDeclaration */:
return textSpan(node, node.entityName || node.externalModuleName);
case 188 /* ModuleDeclaration */:
if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
return undefined;
}
case 184 /* ClassDeclaration */:
case 187 /* EnumDeclaration */:
case 192 /* EnumMember */:
case 144 /* CallExpression */:
case 145 /* NewExpression */:
return textSpan(node);
case 170 /* WithStatement */:
return spanInNode(node.statement);
case 185 /* InterfaceDeclaration */:
case 186 /* TypeAliasDeclaration */:
return undefined;
case 21 /* SemicolonToken */:
case 1 /* EndOfFileToken */:
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile));
case 22 /* CommaToken */:
return spanInPreviousNode(node);
case 13 /* OpenBraceToken */:
return spanInOpenBraceToken(node);
case 14 /* CloseBraceToken */:
return spanInCloseBraceToken(node);
case 15 /* OpenParenToken */:
return spanInOpenParenToken(node);
case 16 /* CloseParenToken */:
return spanInCloseParenToken(node);
case 50 /* ColonToken */:
return spanInColonToken(node);
case 24 /* GreaterThanToken */:
case 23 /* LessThanToken */:
return spanInGreaterThanOrLessThanToken(node);
case 98 /* WhileKeyword */:
return spanInWhileKeyword(node);
case 74 /* ElseKeyword */:
case 66 /* CatchKeyword */:
case 79 /* FinallyKeyword */:
return spanInNextNode(node);
default:
if (node.parent.kind === 141 /* PropertyAssignment */ && node.parent.name === node) {
return spanInNode(node.parent.initializer);
}
if (node.parent.kind === 147 /* TypeAssertion */ && node.parent.type === node) {
return spanInNode(node.parent.operand);
}
if (ts.isAnyFunction(node.parent) && node.parent.type === node) {
return spanInPreviousNode(node);
}
return spanInNode(node.parent);
}
}
function spanInVariableDeclaration(variableDeclaration) {
if (variableDeclaration.parent.kind === 166 /* ForInStatement */) {
return spanInNode(variableDeclaration.parent);
}
var isParentVariableStatement = variableDeclaration.parent.kind === 159 /* VariableStatement */;
var isDeclarationOfForStatement = variableDeclaration.parent.kind === 165 /* ForStatement */ && ts.contains(variableDeclaration.parent.declarations, variableDeclaration);
var declarations = isParentVariableStatement ? variableDeclaration.parent.declarations : isDeclarationOfForStatement ? variableDeclaration.parent.declarations : undefined;
if (variableDeclaration.initializer || (variableDeclaration.flags & 1 /* Export */)) {
if (declarations && declarations[0] === variableDeclaration) {
if (isParentVariableStatement) {
return textSpan(variableDeclaration.parent, variableDeclaration);
}
else {
ts.Debug.assert(isDeclarationOfForStatement);
return textSpan(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent), variableDeclaration);
}
}
else {
return textSpan(variableDeclaration);
}
}
else if (declarations && declarations[0] !== variableDeclaration) {
var indexOfCurrentDeclaration = ts.indexOf(declarations, variableDeclaration);
return spanInVariableDeclaration(declarations[indexOfCurrentDeclaration - 1]);
}
}
function canHaveSpanInParameterDeclaration(parameter) {
return !!parameter.initializer || !!(parameter.flags & 8 /* Rest */) || !!(parameter.flags & 16 /* Public */) || !!(parameter.flags & 32 /* Private */);
}
function spanInParameterDeclaration(parameter) {
if (canHaveSpanInParameterDeclaration(parameter)) {
return textSpan(parameter);
}
else {
var functionDeclaration = parameter.parent;
var indexOfParameter = ts.indexOf(functionDeclaration.parameters, parameter);
if (indexOfParameter) {
return spanInParameterDeclaration(functionDeclaration.parameters[indexOfParameter - 1]);
}
else {
return spanInNode(functionDeclaration.body);
}
}
}
function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) {
return !!(functionDeclaration.flags & 1 /* Export */) || (functionDeclaration.parent.kind === 184 /* ClassDeclaration */ && functionDeclaration.kind !== 126 /* Constructor */);
}
function spanInFunctionDeclaration(functionDeclaration) {
if (!functionDeclaration.body) {
return undefined;
}
if (canFunctionHaveSpanInWholeDeclaration(functionDeclaration)) {
return textSpan(functionDeclaration);
}
return spanInNode(functionDeclaration.body);
}
function spanInFunctionBlock(block) {
var nodeForSpanInBlock = block.statements.length ? block.statements[0] : block.getLastToken();
if (canFunctionHaveSpanInWholeDeclaration(block.parent)) {
return spanInNodeIfStartsOnSameLine(block.parent, nodeForSpanInBlock);
}
return spanInNode(nodeForSpanInBlock);
}
function spanInBlock(block) {
switch (block.parent.kind) {
case 188 /* ModuleDeclaration */:
if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) {
return undefined;
}
case 164 /* WhileStatement */:
case 162 /* IfStatement */:
case 166 /* ForInStatement */:
return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]);
case 165 /* ForStatement */:
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]);
}
return spanInNode(block.statements[0]);
}
function spanInForStatement(forStatement) {
if (forStatement.declarations) {
return spanInNode(forStatement.declarations[0]);
}
if (forStatement.initializer) {
return spanInNode(forStatement.initializer);
}
if (forStatement.condition) {
return textSpan(forStatement.condition);
}
if (forStatement.iterator) {
return textSpan(forStatement.iterator);
}
}
function spanInOpenBraceToken(node) {
switch (node.parent.kind) {
case 187 /* EnumDeclaration */:
var enumDeclaration = node.parent;
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile));
case 184 /* ClassDeclaration */:
var classDeclaration = node.parent;
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile));
case 171 /* SwitchStatement */:
return spanInNodeIfStartsOnSameLine(node.parent, node.parent.clauses[0]);
}
return spanInNode(node.parent);
}
function spanInCloseBraceToken(node) {
switch (node.parent.kind) {
case 189 /* ModuleBlock */:
if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) {
return undefined;
}
case 183 /* FunctionBlock */:
case 187 /* EnumDeclaration */:
case 184 /* ClassDeclaration */:
return textSpan(node);
case 158 /* Block */:
case 177 /* TryBlock */:
case 178 /* CatchBlock */:
case 179 /* FinallyBlock */:
return spanInNode(node.parent.statements[node.parent.statements.length - 1]);
;
case 171 /* SwitchStatement */:
var switchStatement = node.parent;
var lastClause = switchStatement.clauses[switchStatement.clauses.length - 1];
if (lastClause) {
return spanInNode(lastClause.statements[lastClause.statements.length - 1]);
}
return undefined;
default:
return spanInNode(node.parent);
}
}
function spanInOpenParenToken(node) {
if (node.parent.kind === 163 /* DoStatement */) {
return spanInPreviousNode(node);
}
return spanInNode(node.parent);
}
function spanInCloseParenToken(node) {
switch (node.parent.kind) {
case 149 /* FunctionExpression */:
case 182 /* FunctionDeclaration */:
case 150 /* ArrowFunction */:
case 125 /* Method */:
case 127 /* GetAccessor */:
case 128 /* SetAccessor */:
case 126 /* Constructor */:
case 164 /* WhileStatement */:
case 163 /* DoStatement */:
case 165 /* ForStatement */:
return spanInPreviousNode(node);
default:
return spanInNode(node.parent);
}
return spanInNode(node.parent);
}
function spanInColonToken(node) {
if (ts.isAnyFunction(node.parent) || node.parent.kind === 141 /* PropertyAssignment */) {
return spanInPreviousNode(node);
}
return spanInNode(node.parent);
}
function spanInGreaterThanOrLessThanToken(node) {
if (node.parent.kind === 147 /* TypeAssertion */) {
return spanInNode(node.parent.operand);
}
return spanInNode(node.parent);
}
function spanInWhileKeyword(node) {
if (node.parent.kind === 163 /* DoStatement */) {
return textSpan(node, ts.findNextToken(node.parent.expression, node.parent));
}
return spanInNode(node.parent);
}
}
}
BreakpointResolver.spanInSourceFileAtLocation = spanInSourceFileAtLocation;
})(BreakpointResolver = ts.BreakpointResolver || (ts.BreakpointResolver = {}));
})(ts || (ts = {}));
var debugObjectHost = this;
var ts;
(function (ts) {
function languageVersionToScriptTarget(languageVersion) {
if (typeof languageVersion === "undefined")
return undefined;
switch (languageVersion) {
case 0 /* EcmaScript3 */: return 0 /* ES3 */;
case 1 /* EcmaScript5 */: return 1 /* ES5 */;
case 2 /* EcmaScript6 */: return 2 /* ES6 */;
default: throw Error("unsupported LanguageVersion value: " + languageVersion);
}
}
function moduleGenTargetToModuleKind(moduleGenTarget) {
if (typeof moduleGenTarget === "undefined")
return undefined;
switch (moduleGenTarget) {
case 2 /* Asynchronous */: return 2 /* AMD */;
case 1 /* Synchronous */: return 1 /* CommonJS */;
case 0 /* Unspecified */: return 0 /* None */;
default: throw Error("unsupported ModuleGenTarget value: " + moduleGenTarget);
}
}
function scriptTargetTolanguageVersion(scriptTarget) {
if (typeof scriptTarget === "undefined")
return undefined;
switch (scriptTarget) {
case 0 /* ES3 */: return 0 /* EcmaScript3 */;
case 1 /* ES5 */: return 1 /* EcmaScript5 */;
case 2 /* ES6 */: return 2 /* EcmaScript6 */;
default: throw Error("unsupported ScriptTarget value: " + scriptTarget);
}
}
function moduleKindToModuleGenTarget(moduleKind) {
if (typeof moduleKind === "undefined")
return undefined;
switch (moduleKind) {
case 2 /* AMD */: return 2 /* Asynchronous */;
case 1 /* CommonJS */: return 1 /* Synchronous */;
case 0 /* None */: return 0 /* Unspecified */;
default: throw Error("unsupported ModuleKind value: " + moduleKind);
}
}
function compilationSettingsToCompilerOptions(settings) {
var options = {};
options.removeComments = settings.removeComments;
options.noResolve = settings.noResolve;
options.noImplicitAny = settings.noImplicitAny;
options.noLib = settings.noLib;
options.target = languageVersionToScriptTarget(settings.codeGenTarget);
options.module = moduleGenTargetToModuleKind(settings.moduleGenTarget);
options.out = settings.outFileOption;
options.outDir = settings.outDirOption;
options.sourceMap = settings.mapSourceFiles;
options.mapRoot = settings.mapRoot;
options.sourceRoot = settings.sourceRoot;
options.declaration = settings.generateDeclarationFiles;
options.codepage = settings.codepage;
options.emitBOM = settings.emitBOM;
return options;
}
function compilerOptionsToCompilationSettings(options) {
var settings = {};
settings.removeComments = options.removeComments;
settings.noResolve = options.noResolve;
settings.noImplicitAny = options.noImplicitAny;
settings.noLib = options.noLib;
settings.codeGenTarget = scriptTargetTolanguageVersion(options.target);
settings.moduleGenTarget = moduleKindToModuleGenTarget(options.module);
settings.outFileOption = options.out;
settings.outDirOption = options.outDir;
settings.mapSourceFiles = options.sourceMap;
settings.mapRoot = options.mapRoot;
settings.sourceRoot = options.sourceRoot;
settings.generateDeclarationFiles = options.declaration;
settings.codepage = options.codepage;
settings.emitBOM = options.emitBOM;
return settings;
}
function logInternalError(logger, err) {
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
}
var ScriptSnapshotShimAdapter = (function () {
function ScriptSnapshotShimAdapter(scriptSnapshotShim) {
this.scriptSnapshotShim = scriptSnapshotShim;
this.lineStartPositions = null;
}
ScriptSnapshotShimAdapter.prototype.getText = function (start, end) {
return this.scriptSnapshotShim.getText(start, end);
};
ScriptSnapshotShimAdapter.prototype.getLength = function () {
return this.scriptSnapshotShim.getLength();
};
ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () {
if (this.lineStartPositions == null) {
this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions());
}
return this.lineStartPositions;
};
ScriptSnapshotShimAdapter.prototype.getChangeRange = function (oldSnapshot) {
var oldSnapshotShim = oldSnapshot;
var encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim);
if (encoded == null) {
return null;
}
var decoded = JSON.parse(encoded);
return new TypeScript.TextChangeRange(new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength);
};
return ScriptSnapshotShimAdapter;
})();
var LanguageServiceShimHostAdapter = (function () {
function LanguageServiceShimHostAdapter(shimHost) {
this.shimHost = shimHost;
}
LanguageServiceShimHostAdapter.prototype.log = function (s) {
this.shimHost.log(s);
};
LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () {
var settingsJson = this.shimHost.getCompilationSettings();
if (settingsJson == null || settingsJson == "") {
throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings");
return null;
}
var options = compilationSettingsToCompilerOptions(JSON.parse(settingsJson));
return options;
};
LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () {
var encoded = this.shimHost.getScriptFileNames();
return JSON.parse(encoded);
};
LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) {
return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName));
};
LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) {
return this.shimHost.getScriptVersion(fileName);
};
LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) {
return this.shimHost.getScriptIsOpen(fileName);
};
LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () {
var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages();
if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") {
return null;
}
try {
return JSON.parse(diagnosticMessagesJson);
}
catch (e) {
this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format");
return null;
}
};
LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () {
return this.shimHost.getCancellationToken();
};
LanguageServiceShimHostAdapter.prototype.getDefaultLibFilename = function () {
return this.shimHost.getDefaultLibFilename();
};
LanguageServiceShimHostAdapter.prototype.getCurrentDirectory = function () {
return this.shimHost.getCurrentDirectory();
};
return LanguageServiceShimHostAdapter;
})();
ts.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter;
function simpleForwardCall(logger, actionDescription, action) {
logger.log(actionDescription);
var start = Date.now();
var result = action();
var end = Date.now();
logger.log(actionDescription + " completed in " + (end - start) + " msec");
if (typeof (result) === "string") {
var str = result;
if (str.length > 128) {
str = str.substring(0, 128) + "...";
}
logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'");
}
return result;
}
function forwardJSONCall(logger, actionDescription, action) {
try {
var result = simpleForwardCall(logger, actionDescription, action);
return JSON.stringify({ result: result });
}
catch (err) {
if (err instanceof ts.OperationCanceledException) {
return JSON.stringify({ canceled: true });
}
logInternalError(logger, err);
err.description = actionDescription;
return JSON.stringify({ error: err });
}
}
var ShimBase = (function () {
function ShimBase(factory) {
this.factory = factory;
factory.registerShim(this);
}
ShimBase.prototype.dispose = function (dummy) {
this.factory.unregisterShim(this);
};
return ShimBase;
})();
var LanguageServiceShimObject = (function (_super) {
__extends(LanguageServiceShimObject, _super);
function LanguageServiceShimObject(factory, host, languageService) {
_super.call(this, factory);
this.host = host;
this.languageService = languageService;
this.logger = this.host;
}
LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
return forwardJSONCall(this.logger, actionDescription, action);
};
LanguageServiceShimObject.prototype.dispose = function (dummy) {
this.logger.log("dispose()");
this.languageService.dispose();
this.languageService = null;
if (debugObjectHost && debugObjectHost.CollectGarbage) {
debugObjectHost.CollectGarbage();
this.logger.log("CollectGarbage()");
}
this.logger = null;
_super.prototype.dispose.call(this, dummy);
};
LanguageServiceShimObject.prototype.refresh = function (throwOnError) {
this.forwardJSONCall("refresh(" + throwOnError + ")", function () {
return null;
});
};
LanguageServiceShimObject.prototype.cleanupSemanticCache = function () {
var _this = this;
this.forwardJSONCall("cleanupSemanticCache()", function () {
_this.languageService.cleanupSemanticCache();
return null;
});
};
LanguageServiceShimObject.realizeDiagnostic = function (diagnostic) {
return {
message: diagnostic.messageText,
start: diagnostic.start,
length: diagnostic.length,
category: ts.DiagnosticCategory[diagnostic.category].toLowerCase(),
code: diagnostic.code
};
};
LanguageServiceShimObject.prototype.getSyntacticClassifications = function (fileName, start, length) {
var _this = this;
return this.forwardJSONCall("getSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
var classifications = _this.languageService.getSyntacticClassifications(fileName, new TypeScript.TextSpan(start, length));
return classifications;
});
};
LanguageServiceShimObject.prototype.getSemanticClassifications = function (fileName, start, length) {
var _this = this;
return this.forwardJSONCall("getSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
var classifications = _this.languageService.getSemanticClassifications(fileName, new TypeScript.TextSpan(start, length));
return classifications;
});
};
LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) {
var _this = this;
return this.forwardJSONCall("getSyntacticDiagnostics('" + fileName + "')", function () {
var errors = _this.languageService.getSyntacticDiagnostics(fileName);
return errors.map(LanguageServiceShimObject.realizeDiagnostic);
});
};
LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) {
var _this = this;
return this.forwardJSONCall("getSemanticDiagnostics('" + fileName + "')", function () {
var errors = _this.languageService.getSemanticDiagnostics(fileName);
return errors.map(LanguageServiceShimObject.realizeDiagnostic);
});
};
LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () {
var _this = this;
return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () {
var errors = _this.languageService.getCompilerOptionsDiagnostics();
return errors.map(LanguageServiceShimObject.realizeDiagnostic);
});
};
LanguageServiceShimObject.prototype.getQuickInfoAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getQuickInfoAtPosition('" + fileName + "', " + position + ")", function () {
var quickInfo = _this.languageService.getQuickInfoAtPosition(fileName, position);
return quickInfo;
});
};
LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) {
var _this = this;
return this.forwardJSONCall("getNameOrDottedNameSpan('" + fileName + "', " + startPos + ", " + endPos + ")", function () {
var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos);
return spanInfo;
});
};
LanguageServiceShimObject.prototype.getBreakpointStatementAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getBreakpointStatementAtPosition('" + fileName + "', " + position + ")", function () {
var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position);
return spanInfo;
});
};
LanguageServiceShimObject.prototype.getSignatureHelpItems = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getSignatureHelpItems('" + fileName + "', " + position + ")", function () {
var signatureInfo = _this.languageService.getSignatureHelpItems(fileName, position);
return signatureInfo;
});
};
LanguageServiceShimObject.prototype.getSignatureAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getSignatureAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getSignatureAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getDefinitionAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getDefinitionAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getRenameInfo = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getRenameInfo('" + fileName + "', " + position + ")", function () {
return _this.languageService.getRenameInfo(fileName, position);
});
};
LanguageServiceShimObject.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) {
var _this = this;
return this.forwardJSONCall("findRenameLocations('" + fileName + "', " + position + ", " + findInStrings + ", " + findInComments + ")", function () {
return _this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments);
});
};
LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () {
var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position);
return textRanges;
});
};
LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) {
var _this = this;
return this.forwardJSONCall("getIndentationAtPosition('" + fileName + "', " + position + ")", function () {
var localOptions = JSON.parse(options);
return _this.languageService.getIndentationAtPosition(fileName, position, localOptions);
});
};
LanguageServiceShimObject.prototype.getReferencesAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getReferencesAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getReferencesAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getOccurrencesAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getOccurrencesAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getOccurrencesAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getImplementorsAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getImplementorsAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getImplementorsAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) {
var _this = this;
return this.forwardJSONCall("getCompletionsAtPosition('" + fileName + "', " + position + ", " + isMemberCompletion + ")", function () {
var completion = _this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion);
return completion;
});
};
LanguageServiceShimObject.prototype.getCompletionEntryDetails = function (fileName, position, entryName) {
var _this = this;
return this.forwardJSONCall("getCompletionEntryDetails('" + fileName + "', " + position + ", " + entryName + ")", function () {
var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName);
return details;
});
};
LanguageServiceShimObject.prototype.getFormattingEditsForRange = function (fileName, start, end, options) {
var _this = this;
return this.forwardJSONCall("getFormattingEditsForRange('" + fileName + "', " + start + ", " + end + ")", function () {
var localOptions = JSON.parse(options);
var edits = _this.languageService.getFormattingEditsForRange(fileName, start, end, localOptions);
return edits;
});
};
LanguageServiceShimObject.prototype.getFormattingEditsForDocument = function (fileName, options) {
var _this = this;
return this.forwardJSONCall("getFormattingEditsForDocument('" + fileName + "')", function () {
var localOptions = JSON.parse(options);
var edits = _this.languageService.getFormattingEditsForDocument(fileName, localOptions);
return edits;
});
};
LanguageServiceShimObject.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) {
var _this = this;
return this.forwardJSONCall("getFormattingEditsAfterKeystroke('" + fileName + "', " + position + ", '" + key + "')", function () {
var localOptions = JSON.parse(options);
var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions);
return edits;
});
};
LanguageServiceShimObject.prototype.getNavigateToItems = function (searchValue) {
var _this = this;
return this.forwardJSONCall("getNavigateToItems('" + searchValue + "')", function () {
var items = _this.languageService.getNavigateToItems(searchValue);
return items;
});
};
LanguageServiceShimObject.prototype.getNavigationBarItems = function (fileName) {
var _this = this;
return this.forwardJSONCall("getNavigationBarItems('" + fileName + "')", function () {
var items = _this.languageService.getNavigationBarItems(fileName);
return items;
});
};
LanguageServiceShimObject.prototype.getOutliningSpans = function (fileName) {
var _this = this;
return this.forwardJSONCall("getOutliningSpans('" + fileName + "')", function () {
var items = _this.languageService.getOutliningSpans(fileName);
return items;
});
};
LanguageServiceShimObject.prototype.getTodoComments = function (fileName, descriptors) {
var _this = this;
return this.forwardJSONCall("getTodoComments('" + fileName + "')", function () {
var items = _this.languageService.getTodoComments(fileName, JSON.parse(descriptors));
return items;
});
};
LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) {
var _this = this;
return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () {
var output = _this.languageService.getEmitOutput(fileName);
return output;
});
};
return LanguageServiceShimObject;
})(ShimBase);
var ClassifierShimObject = (function (_super) {
__extends(ClassifierShimObject, _super);
function ClassifierShimObject(factory, logger) {
_super.call(this, factory);
this.logger = logger;
this.classifier = ts.createClassifier(this.logger);
}
ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState) {
var classification = this.classifier.getClassificationsForLine(text, lexState);
var items = classification.entries;
var result = "";
for (var i = 0; i < items.length; i++) {
result += items[i].length + "\n";
result += items[i].classification + "\n";
}
result += classification.finalLexState;
return result;
};
return ClassifierShimObject;
})(ShimBase);
var CoreServicesShimObject = (function (_super) {
__extends(CoreServicesShimObject, _super);
function CoreServicesShimObject(factory, logger) {
_super.call(this, factory);
this.logger = logger;
}
CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
return forwardJSONCall(this.logger, actionDescription, action);
};
CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceTextSnapshot) {
return this.forwardJSONCall("getPreProcessedFileInfo('" + fileName + "')", function () {
var result = ts.preProcessFile(sourceTextSnapshot.getText(0, sourceTextSnapshot.getLength()));
var convertResult = {
referencedFiles: [],
importedFiles: [],
isLibFile: result.isLibFile
};
ts.forEach(result.referencedFiles, function (refFile) {
convertResult.referencedFiles.push({
path: ts.normalizePath(refFile.filename),
position: refFile.pos,
length: refFile.end - refFile.pos
});
});
ts.forEach(result.importedFiles, function (importedFile) {
convertResult.importedFiles.push({
path: ts.normalizeSlashes(importedFile.filename),
position: importedFile.pos,
length: importedFile.end - importedFile.pos
});
});
return convertResult;
});
};
CoreServicesShimObject.prototype.getDefaultCompilationSettings = function () {
return this.forwardJSONCall("getDefaultCompilationSettings()", function () {
return compilerOptionsToCompilationSettings(ts.getDefaultCompilerOptions());
});
};
return CoreServicesShimObject;
})(ShimBase);
var TypeScriptServicesFactory = (function () {
function TypeScriptServicesFactory() {
this._shims = [];
this.documentRegistry = ts.createDocumentRegistry();
}
TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) {
try {
var hostAdapter = new LanguageServiceShimHostAdapter(host);
var languageService = ts.createLanguageService(hostAdapter, this.documentRegistry);
return new LanguageServiceShimObject(this, host, languageService);
}
catch (err) {
logInternalError(host, err);
throw err;
}
};
TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) {
try {
return new ClassifierShimObject(this, logger);
}
catch (err) {
logInternalError(logger, err);
throw err;
}
};
TypeScriptServicesFactory.prototype.createCoreServicesShim = function (logger) {
try {
return new CoreServicesShimObject(this, logger);
}
catch (err) {
logInternalError(logger, err);
throw err;
}
};
TypeScriptServicesFactory.prototype.close = function () {
this._shims = [];
this.documentRegistry = ts.createDocumentRegistry();
};
TypeScriptServicesFactory.prototype.registerShim = function (shim) {
this._shims.push(shim);
};
TypeScriptServicesFactory.prototype.unregisterShim = function (shim) {
for (var i = 0, n = this._shims.length; i < n; i++) {
if (this._shims[i] === shim) {
delete this._shims[i];
return;
}
}
throw TypeScript.Errors.invalidOperation();
};
return TypeScriptServicesFactory;
})();
ts.TypeScriptServicesFactory = TypeScriptServicesFactory;
})(ts || (ts = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
Services.TypeScriptServicesFactory = ts.TypeScriptServicesFactory;
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));